2012-06-20 94 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

相關問題