【发布时间】:2021-07-08 16:50:22
【问题描述】:
我正在使用this code,它读取给定目录中的每个文本文件:
# Import Module
import os
# Folder Path
path = "Enter Folder Path"
# Change the directory
os.chdir(path)
# Read text File
def read_text_file(file_path):
with open(file_path, 'r') as f:
print(f.read())
# iterate through all file
for file in os.listdir():
# Check whether file is in text format or not
if file.endswith(".txt"):
file_path = f"{path}\{file}"
# call read text file function
read_text_file(file_path)
问题在于,它不是按时间顺序读取每个数据文件(data1.txt、data2.txt、data3.txt 等),而是以一种非常奇怪的方式读取每个文件(data1.txt、data10.txt 、data101.txt、data2.txt 等)。
为什么会这样,我该如何解决?
【问题讨论】:
-
os.listdir返回一个列表,其中包含路径给定的目录中条目的名称,该列表按任意顺序排列。如果您希望它们按特定顺序排列,则需要对其进行排序。 -
查看文档:docs.python.org/3/library/os.html 该列表按任意顺序排列,不包括特殊条目 '.'和 '..' 即使它们存在于目录中
-
按字典顺序读取文件有什么奇怪的?您要求系统神奇地将每个文件名的数字部分解释为整数,并为您按该顺序对文件进行排序。您需要在文件名上插入“自然排序”。
-
@Stephen:OP 似乎认为“按时间顺序”意味着用数字表示他们不明白是什么决定了
os.listdir()返回的文件的顺序,这就是为什么它 是 i> 基本上是重复的。 -
@Alex:OP 似乎认为文件名与其创建数据有关,当然不一定总是如此。