我有一个包含特定扩展名文件的文件夹,例如:'LRZ_OA_12115.txt'。我有数百个这些名字的文件。以下是任务: i)我想以数字顺序访问每个这些文件。例如,我希望在LRZ_OA_12116之前有LRZ_OA_12115。 ii)我想访问并阅读这个部分:文件夹中每个文件的12115(不是字母)。通读文件夹中的文件
我会很感激任何答案。
谢谢。
我有一个包含特定扩展名文件的文件夹,例如:'LRZ_OA_12115.txt'。我有数百个这些名字的文件。以下是任务: i)我想以数字顺序访问每个这些文件。例如,我希望在LRZ_OA_12116之前有LRZ_OA_12115。 ii)我想访问并阅读这个部分:文件夹中每个文件的12115(不是字母)。通读文件夹中的文件
我会很感激任何答案。
谢谢。
for filename in sorted(os.listdir('<your-directory>')):
name, _ = os.path.splitext(filename)
# do something with name
作为让弗朗索瓦法布尔注意到,这给lexicographic order(12115 12116之前,但2 10之前),而不是严格的数字顺序。如果您需要后者,然后修改这样的代码:
sort_key = lambda x: int(os.path.splitext(x)[0]) if os.path.splitext(x)[0].isdigit() else 0
for filename in sorted(os.listdir('<your-directory>'), key=sort_key):
...
这不会排序数字。 –
这样做:
import os, glob
files = sorted(glob.glob(path + '*.txt'), key=os.path.basename)
对于数字,你可以这样做:
files = sorted(glob.glob('*.txt'), key=lambda name: int(os.path.splitext(name)[0]))
按照修改时间排序,而不是按名称排序... –
'name [4:-4]'看起来不对。 –
'>>>“12345678.txt”[4:-4] '5678'' –
我的建议:
import os
the_dir = "/path/to/your/files"
print(sorted(os.listdir(the_dir),key = lambda x: int(os.path.splitext(x)[0]) if os.path.splitext(x)[0].isdigit() else 0))
它按目录排序目录列表名称部分的数值(不带扩展名),检查这部分是数字,以避免在转换为整数时出现异常(其他名称 - 如果有的话 - 在开始时留下,并且未排序)
你有什么尝试到目前为止? – CodeCupboard
使用'lambda x:int(os.path.splitext(x)[0])'作为键进行排序。但是你必须检查文件名是否都是数字,否则你会得到一个异常。 –
12115 12116之前不是数字顺序,它是字母顺序。你需要在10之前2对吗? –