2016-12-05 188 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