2

私は完全なPython初心者です

.txt ファイルを探してディレクトリをループし、それらを個別に読み取って処理する必要があります。スクリプトがあるディレクトリがこのアクションのルートとして扱われるように、これを設定したいと思います。たとえば、スクリプトが /bsepath/workDir にある場合、workDir とその子にあるすべてのファイルをループします。

私がこれまでに持っているものは次のとおりです。

#!/usr/bin/env python

import os

scrptPth = os.path.realpath(__file__)

for file in os.listdir(scrptPth)
    with open(file) as f:
        head,sub,auth = [f.readline().strip() for i in range(3)]
        data=f.read()
        #data.encode('utf-8')

pth = os.getcwd()

print head,sub,auth,data,pth

このコードで無効な構文エラーが発生します。これos.listdirは、標準の文字列形式のファイル パスが気に入らないためだと思われます。また、ループアクションを正しく行っているとは思いません。ループ アクションで特定のファイルを参照するにはどうすればよいですか? 変数としてパッケージ化されていますか?

どんな助けも感謝します

4

2 に答える 2

11
import os, fnmatch

def findFiles (path, filter):
    for root, dirs, files in os.walk(path):
        for file in fnmatch.filter(files, filter):
            yield os.path.join(root, file)

このように使用すると、指定されたパス内のどこかにあるすべてのテキスト ファイルが (再帰的に) 検索されます。

for textFile in findFiles(r'C:\Users\poke\Documents', '*.txt'):
    print(textFile)
于 2012-11-08T23:40:30.750 に答える
3

os.listdir入力としてディレクトリが必要です。したがって、スクリプトが存在するディレクトリを取得するには、次を使用します。

scrptPth = os.path.dirname(os.path.realpath(__file__))

また、os.listdirフル パスではなく、ファイル名だけを返します。そのopen(file)ため、現在の作業ディレクトリがたまたまスクリプトが存在するディレクトリでない限り、機能しません。これを修正するには、次を使用しますos.path.join

import os

scrptPth = os.path.dirname(os.path.realpath(__file__))

for file in os.listdir(scrptPth):
    with open(os.path.join(scrptPth, file)) as f:

最後に、サブディレクトリを再帰する場合は、次を使用しますos.walk

import os

scrptPth = os.path.dirname(os.path.realpath(__file__))

for root, dirs, files in os.walk(scrptPth):
    for filename in files:
        filename = os.path.join(root, filename)
        with open(filename, 'r') as f:
            head,sub,auth = [f.readline().strip() for i in range(3)]
            data=f.read()
            #data.encode('utf-8')
于 2012-11-08T23:32:20.373 に答える