2016-07-26 2 views
0

Я пытаюсь найти строку, содержащуюся в файлах под каталогом. Затем сделайте это, чтобы сохранить его имена файлов и каталоги в новом текстовом файле или что-то в этом роде. Я добрался до того места, где он просматривает каталог и находит строку, а затем печатает результат. Но не уверен в следующем шаге.Как сохранить имена файлов и их путь к каталогам в текстовом файле с помощью Python

Пожалуйста, помогите, я совершенно не знаком с кодированием и питоном.

import glob, os 



#Open a source as a file and assign it as source 
source = open('target.txt').read() 
filedirectories = [] 

#locating the source file and printing the directories. 
os.chdir("/Users/a1003584/desktop") 
for root, dirs, files in os.walk(".", topdown=True): 
    for name in files: 
     print(os.path.join(root, name)) 
     if source in open(os.path.join(root, name)).read(): 
      print 'treasure found.' 
+0

Вы можете найти [список Репетитор питона] (https://mail.python.org/mailman/listinfo/tutor) более подходящим для таких вопросов. –

ответ

0

Не используйте сравнение строк, если вы ищете словарь. Вместо этого используйте модуль json. Как это.

import json 
import os 

filesFound = [] 

def searchDir(dirName): 
    for name in os.listdir(dirName): 
     # If it is a file. 
     if os.isfile(dirName+name): 
      try: 
       fileCon = json.load(dirName+name) 
      except: 
       print("None json file.") 
      if "KeySearchedFor" in fileCon: 
       filesFound.append(dirName+name) 
     # If it is a directory. 
     else: 
      searchDir(dirName+name+'/') 

# Change this to the directory your looking in. 
searchDir("~/Desktop") 
open("~/Desktop/OutFile.txt",'w').write(filesFound) 
+0

В чем же разница, если бы использовать модуль json? – Eric

0

Это следует записывать вывод в файл CSV

import csv 
import os 

with open('target.txt') as infile: source = infile.read() 

with open("output.csv", 'w') as fout: 
    outfile = csv.writer(fout) 
    outfile.writerow("Directory FileName FilePath".split()) 
    for root, dirnames, fnames in os.walk("/Users/a1003584/desktop", topdown=True): 
     for fname in fnames: 
      with open(os.path.join(root, fname)) as infile: 
       if source not in infile.read(): continue 
      outfile.writerow(root, fname, os.path.join(root, fname)) 
Смежные вопросы