2015-05-04 47 views
0

我想用python中的两个不同的文件夹(一个文本文件)写一个列表;但是,当我运行我的程序时,只有第二个文件路径追加到列表中,并出现在我的文本文件中。如何追加我的列表以便两个文件夹中的文件都显示出来?我想我的代码在第一步之后清空列表。我想保持两个文件夹分开,不想仅仅为了列表而将它们合并。从python中的两个不同的文件夹创建文本文件

import os 
from os import listdir 
from os.path import isfile, join 

root = r'C:\GEO\Images\data\data_2008\ims_data_2008' 
mylist = [ ] 
for path, subdirs, files in os.walk(root): 
    for name in files: 
      mylist.append(os.path.join(path, name)) 

roottwo = r'C:\GEO\Images\data\data_2009\ims_data_2009' 
mylist = [ ] 
for path, subdirs, files in os.walk(roottwo): 
    for name in files: 
      mylist.append(os.path.join(path, name)) 

txt = open(r'C:\GEO6973\FinalExam\YoungResults\ims_data_list.txt', 'w') 
txt.write('dir' + ',' + 'file' + '\n') 
for item in mylist: 
    list = mylist.pop(0) 
    dir, filename = os.path.basename(os.path.dirname(list)), os.path.basename(list) 
    txt.write(dir + ',' + filename + '\n') 

with open(r'C:\GEO6973\FinalExam\YoungResults\ims_data_list.txt', 'r') as f: 
    read_data = f.read() 

回答

2

正如你所说,你的代码是清空第一个文件夹后的列表。您必须在roottwo之后删除第二个mylist = [ ],否则到目前为止您将丢失附加到列表中的所有数据。

在最后一个循环中,如果您试图迭代附加到mylist的路径,请不要使用pop来访问其内容。相反:

for item in mylist: 
    dir, filename = os.path.basename(os.path.dirname(item)), os.path.basename(item) 
    txt.write(dir + ',' + filename + '\n') 

最后,尽量避免使用list作为变量名,因为它是Python中的保留关键字。

+0

如果我在roottwo后删除themylist,只有根文件写入我的列表。 –

+0

删除mylist的重新定义后,不应该发生这种情况。第一次声明后,您只能附加项目。如果在打开输出文件之前打印mylist,则应该有两个文件夹的内容。 – ODiogoSilva

+0

删除重新定义不起作用。我认为这与我的mylist.pop(0)声明有关。 –

1

经过rootwo设置后,您打电话给mylist = [ ]。这将创建一个新列表,有效地删除您之前附加到列表中的所有数据。

相关问题