3

ファイルを含む多くのディレクトリがあります。ディレクトリ名とその特定のディレクトリ内にあるファイルを示すコンマ区切りのtxtファイルを作成したいです。以下の例を参照してください。

私が探しているもの:

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

以下の python コードは、これらのファイル パスのリストをテキスト ファイルにプッシュしますが、上記のようにリストをフォーマットする方法がわかりません。

私の現在のコードは次のようになります。

アップデート

テキスト ファイルをフォーマットできましたが、すべてのディレクトリ名/ファイル名がテキスト ファイルに書き込まれていないことに気付きました。〜8000個のディレクトリ/ファイルのうち〜4000個しか書き込んでいません。テキストファイルの行数、リスト(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()

ありがとうございました

4

1 に答える 1

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'

また、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)))
于 2012-06-20T15:07:45.333 に答える