我有一个包含15个文件的文件,它们的名称分别从1到15。我使用以下代码读取特定目录中的所有文件:
files_path = [os.path.abspath(x) for x in os.listdir()]
但是它读取从1到15,然后从2到9命名的文件。它是一种将文件分别读取为1,2,3,。。。,15?
谢谢。
您的两个问题实际上是相互关联的。
为了用"0"对CCD_ 1的输出进行排序;天然的";数字排序顺序,您需要该函数来提取数字。然后可以将该函数用作sorted()
(或list.sort()
(的key
函数参数。
见下文;我有一个模拟listdir()
,因为我没有这些文件,但您自然会在自己的代码中使用自己的os.listdir()
。
import os
def listdir():
return sorted(fr"C:/output5000k/{x}.mp4" for x in range(1, 16))
def get_file_number(path: str) -> int:
basename = os.path.basename(path)
filename, ext = os.path.splitext(basename)
return int(filename)
print(sorted(listdir(), key=get_file_number))
这会打印出
['C:/output5000k/1.mp4', 'C:/output5000k/2.mp4', 'C:/output5000k/3.mp4', 'C:/output5000k/4.mp4', ...]
正如预期的那样。