如何从目录中读取所有 .txt 文件

How to read all .txt files from a directory

我想读取目录中所有文本文件的所有内容。我在“路径”目录中有4个文本文件,我的代码是;

for filename in os.listdir(path):
    filepath = os.path.join(path, filename)
    with open(filepath, mode='r') as f:
        content = f.read()
        thelist = content.splitlines()
        f.close()
        print(filepath)
        print(content)
        print()

当我运行代码时,我只能读取只有一个文本文件的内容。

如果您有任何意见或建议,或者您知道在 Whosebug 中对这个问题的任何其他信息查询,我将不胜感激。

基本上,如果你想读取所有文件,你需要以某种方式保存它们。在您的示例中,您将 thelist 覆盖为 content.splitlines() ,这将删除其中已有的所有内容。 相反,您应该在循环外定义 thelist 并每次使用 thelist.append(content.splitlines),这样每次迭代都会将内容添加到列表中

然后您可以稍后迭代 thelist 并取出数据。

这应该会列出您的文件,您可以一一阅读。文件的所有行都存储在 all_lines 列表中。如果你也想存储内容,你也可以保留它

from pathlib import Path
from os import listdir
from os.path import isfile, join

path = "path_to_dir"
only_files = [f for f in listdir(path) if isfile(join(path, f))]
all_lines = []
for file_name in only_files:
    file_path = Path(path) / file_name
    with open(file_path, 'r') as f:
        file_content = f.read()
        all_lines.append(file_content.splitlines())
        print(file_content)

# use all_lines

注意:使用 with 时不需要显式调用 close()

参考:How do I list all files of a directory?

如果您需要根据后缀过滤文件名,即文件扩展名,您可以使用字符串方法 endswith 或标准库 glob 模块 https://docs.python.org/3/library/glob.html 这里有一个代码示例,它将每个文件内容保存为列表中的字符串。

import os

path = '.' # or your path

files_content = []

for filename in filter(lambda p: p.endswith("txt"), os.listdir(path)):
    filepath = os.path.join(path, filename)
    with open(filepath, mode='r') as f:
        files_content += [f.read()]

这里以glob方式为例

import glob

for filename in glob.glob('*txt'):
    print(filename)