如何从目录中读取所有 .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)
我想读取目录中所有文本文件的所有内容。我在“路径”目录中有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)