単一のテキストファイルの値を読み取るコードが機能していますが、すべてのディレクトリからすべてのファイルを読み取り、すべてのコンテンツをまとめるのに問題があります。
これが私が持っているものです:
filename = '*'
filesuffix = '*'
location = os.path.join('Test', filename + "." + filesuffix)
Document = filename
thedictionary = {}
with open(location) as f:
file_contents = f.read().lower().split(' ') # split line on spaces to make a list
for position, item in enumerate(file_contents):
if item in thedictionary:
thedictionary[item].append(position)
else:
thedictionary[item] = [position]
wordlist = (thedictionary, Document)
#print wordlist
#print thedictionary
ファイル名にはワイルドカード*を、ファイルサフィックスにはワイルドカードを使用しようとしていることに注意してください。次のエラーが発生します。
"IOError:[Errno 2]そのようなファイルまたはディレクトリはありません: 'Test /。'"
これが正しい方法であるかどうかはわかりませんが、どういうわけかワイルドカードを機能させると、機能するはずです。
私はこの例を機能させました: Python-サブディレクトリ(そこにあります)に見つからないディレクトリファイルからファイルを読み取る
これは少し異なりますが、すべてのファイルを読み取るように更新する方法がわかりません。この最初のコードセットでは、次のように考えています。
previous_dir = os.getcwd()
os.chdir('testfilefolder')
#add something here?
for filename in os.listdir('.'):
外側のforループがあるが、何を入れるべきかよくわからない場合は、何かを追加する必要があります。
何かご意見は?
Pythonは、open()
呼び出しのファイル名で直接ワイルドカードをサポートしていません。代わりに glob
module を使用して単一レベルのサブディレクトリからファイルをロードするか、 os.walk()
を使用してウォークする必要があります。任意のディレクトリ構造。
すべてのサブディレクトリ内のすべてのテキストファイルを1レベル深く開く:
import glob
for filename in glob.iglob(os.path.join('Test', '*', '*.txt')):
with open(filename) as f:
# one file open, handle it, next loop will present you with a new file.
ディレクトリの任意のネストですべてのテキストファイルを開く:
import os
import fnmatch
for dirpath, dirs, files in os.walk('Test'):
for filename in fnmatch.filter(files, '*.txt'):
with open(os.path.join(dirpath, filename)):
# one file open, handle it, next loop will present you with a new file.