关于python:读取所有目录中的所有文件

Reading all files in all directories

本问题已经有最佳答案,请猛点这里访问。

我的代码可以读取单个文本文件的值,但我很难从所有目录读取所有文件并将所有内容放在一起。

这是我所拥有的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

请注意,我正在尝试将通配符*插入文件名以及filesuffix的通配符中。我得到以下错误:

"IOError: [Errno 2]没有这样的文件或目录:'Test/。"

我不确定这是否是正确的方法,但似乎如果我以某种方式让通配符工作—它应该工作。

我已经让这个例子工作:Python -从目录文件中读取没有在子目录中找到的文件(在那里)

这有点不同-但不知道如何更新它读取所有文件。我在想,在这最初的一组代码中:

1
2
3
4
previous_dir = os.getcwd()
os.chdir('testfilefolder')
#add something here?
for filename in os.listdir('.'):

我将需要添加一些东西,其中我有一个外部for循环,但不太知道要放入什么。

任何想法吗?


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

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

1
2
3
4
5
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.

打开任意嵌套目录中的所有文本文件:

1
2
3
4
5
6
7
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.