2012-06-20 57 views
3

我有许多目录中包含文件。我想创建分隔的txt文件显示目录名一个逗号,是特定的目录内的文件,见下面的例子:目录名称+文件名到文本文件

我正在寻找:

DirName,Filename 
999,123.tif 
999,1234.tif 
999,abc.tif 
900,1236.tif 
900,xyz.tif 
...etc 

的Python代码下面将这些文件路径的列表推入到文本文件中,但是我不确定如何按上述格式化列表。

我当前的代码看起来像:

更新

我已经能够现在格式化的文本文件,但是我注意到所有的目录名/文件名没有被写入到文本文件。它只能写入4000个〜8000目录/文件。对于文本文件行数,列表(mylist)大小,或者一些不良文件目录/文件字符是否会阻止它(请参阅下面的更新代码),是否有一些排序限制?

from os import listdir 
from os.path import isfile, join 
root = r'C:\temp' 
mylist = ['2'] 
for path, subdirs, files in os.walk(root): 
    for name in files: 
      mylist.append(os.path.join(path, name)) 

txt = open(r'C:\temp\output.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:\temp\output.txt', 'r') as f: 
    read_data = f.read() 

谢谢

回答

3

也许这可以帮助:

你可以得到文件的绝对路径,然后执行以下

import os.path 
p = "/tmp/999/123.tif" 
dir, filename = os.path.basename(os.path.dirname(p)), os.path.basename(p) 

结果:

In [21]: dir 
Out[21]: '999' 

In [22]: filename 
Out[22]: '123.tif' 

而且C使用csv模块来写这种文件。

import csv 
import os.path 

# You already have a list of absolute paths 
files = ["/tmp/999/123.tif"] 

# csv writer 
with open('/tmp/out.csv', 'wb') as out_file: 
    csv_writer = csv.writer(out_file, delimiter=',') 
    csv_writer.writerow(('DirName','Filename')) 
    for f in files: 
     csv_writer.writerow((os.path.basename(os.path.dirname(f)), 
          os.path.basename(f))) 
+0

在你的csv片段下,应该是文件吗?如果是这样,我得到一个错误,说不能连接'str'和'list'。 – artwork21

+0

对不起@ artwork21,现在是固定的,'p'确实是'f'(文件的当前路径) –

+0

太好了,谢谢! – artwork21

相关问题