2016-07-28 4 views
0

Я хотел бы изменить и заменить строки всех .txt-файлов в директории с питоном для этой цели я использую следующий код:Как редактировать строки всех текстовых файлов в директории с питоном

path = '.../dbfiles' 
for filename in os.listdir(path): 
for i in os.listdir(path): 
    if i.endswith(".txt"): 
     with open(i, 'r') as f_in: 
      for line in f_in: 
       line=tweet_to_words(line).encode('utf-8') 
       open(i, 'w').write(line) 

, где tweet_to_words(line) является предопределенной функцией для строк редактирования текстового файла. Хотя я не уверен, правильная ли логика кода !? Я также облицовочный следующее сообщение об ошибке:

IOError: [Errno 2] No such file or directory: 'thirdweek.txt'

но «thirdweek.txt» существуют в каталоге! Итак, мой вопрос заключается в том, правильно ли я использую метод, который я использую для редактирования строк в файле !? и если да, то как я могу исправить ошибку?

+1

Если файлы не огромны (более 1 МБ), я предлагаю сначала прочитать файл с содержимым = f.readlines(), а затем применить twe et_to_words для каждого элемента. После этого снова откройте файл для записи и записи преобразованных строк (f.write ("". Join (content)) – traianus

+1

Вам нужно указать правильный путь, как показано в ответе Охада. И вам нужна другая логика для редактирования файла. В настоящее время ваш вызов '.write' уничтожит все существующее содержимое файла. Либо сделайте то, что предлагает traianus, или даже проще, создайте новый файл, содержащий отредактированные данные. –

ответ

2

Вы должны добавить базовый путь при использовании open:

 with open(path + '/' + i, 'r') as f_in: 

То же самое касается:

   open(path + '/' + i, 'w').write(line) 
+3

Несмотря на то, что конкатенация стинга работает, более безопасно (и более переносимо) использовать ['os.path.join'] (https://docs.python.org/3/library/os.path.html#os.path.join). –

1

Модуль Глоб полезен для получения файлов с похожими окончаниями:

import glob 

print glob.glob("*.txt") # Returns a list of all .txt files, with path info 

for item in glob.glob("*.txt"): 
    temp = [] # Might be useful to use a temp list before overwriting your file 
    with open(item, "r") as f: 
     for line in f: 
      print line # Do something useful here 
      temp.append(line) 
    with open(item, "w") as f: 
     f.writelines(temp)