2016-12-05 4 views
4
import sys 
import glob 
import os.path 

list_of_files = glob.glob('/Users/Emily/Topics/*.txt') #500 files 

for file_name in list_of_files: 
    print(file_name) 

f= open(file_name, 'r') 
lst = [] 
for line in f: 
    line.strip() 
    line = line.replace("\n" ,'') 
    line = line.replace("//" , '') 
    lst.append(line) 
f.close() 

f=open(os.path.join('/Users/Emily/UpdatedTopics', 
os.path.basename(file_name)) , 'w') 

for line in lst: 
    f.write(line) 
f.close() 

Я смог прочитать свои файлы и сделать предварительную обработку. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пишу файлы, я могу видеть только один файл. Я должен получить 500 файлов.Python: чтение и запись нескольких файлов

+3

Исправить ваши отступы. Невозможно отладить ваш скрипт, если отступы отключены, нам нужно точно посмотреть, что вы используете. –

+1

Если это действительно то, как ваш файл имеет отступы, это может полностью изменить ваш скрипт ... – ngoue

+0

@ juanpa.arrivillaga, пожалуйста, проверьте сейчас! – EmilyG

ответ

2

Как в настоящее время написано, единственным файлом, который обрабатывается, является последний файл в списке имен файлов. Вам нужно отступать, чтобы каждый файл обрабатывался в вашем цикле.

import sys 
import glob 
import os.path 

list_of_files = glob.glob('/Users/Emily/Topics/*.txt') #500 files 

for file_name in list_of_files: 
    print(file_name) 

    # This needs to be done *inside the loop* 
    f= open(file_name, 'r') 
    lst = [] 
    for line in f: 
     line.strip() 
     line = line.replace("\n" ,'') 
     line = line.replace("//" , '') 
     lst.append(line) 
    f.close() 

    f=open(os.path.join('/Users/Emily/UpdatedTopics', 
    os.path.basename(file_name)) , 'w') 

    for line in lst: 
     f.write(line) 
    f.close() 
+0

Большое вам спасибо! – EmilyG

3

Python использует отступы вместо фигурных скобок, чтобы помочь сгруппировать код. Сейчас путь ваш код с отступом, Python интерпретирует это следующим образом:

# get list of files 
list_of_files = glob.glob('/Users/Emily/Topics/*.txt') #500 files 

# loop through all file names 
for file_name in list_of_files: 
    # print the name of file 
    print(file_name) 

# PROBLEM: you remove your indentation so we are no longer in 
# our for loop. Now we take the last value of file_name (or the 
# last file in the list) and open it and then continue the script 
f= open(file_name, 'r') 
... 

Обратите внимание, что мы оставляем для цикла из-за изменения отступа. Остальная часть вашего скрипта работает только с последним файлом, открытым в цикле for.

+0

Спасибо за объяснение! – EmilyG

Смежные вопросы