15

我有代码可以读取单个文本文件的值,但是在读取所有目录中的所有文件并将所有内容放在一起时遇到了困难。

这是我所拥有的:

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 循环的地方添加一些东西,但不知道该放什么..

有什么想法吗?

4

1 回答 1

18

Python 不支持直接在open()调用的文件名中使用通配符。您将需要使用该glob模块来从单级子目录加载文件,或用于os.walk()遍历任意目录结构。

打开所有子目录中的所有文本文件,一层深:

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.
于 2013-04-15T13:09:06.777 回答