2017-04-09 53 views
-1

我有一个包含特定扩展名文件的文件夹,例如:'LRZ_OA_12115.txt'。我有数百个这些名字的文件。以下是任务: i)我想以数字顺序访问每个这些文件。例如,我希望在LRZ_OA_12116之前有LRZ_OA_12115。 ii)我想访问并阅读这个部分:文件夹中每个文件的12115(不是字母)。通读文件夹中的文件

我会很感激任何答案。

谢谢。

+0

你有什么尝试到目前为止? – CodeCupboard

+0

使用'lambda x:int(os.path.splitext(x)[0])'作为键进行排序。但是你必须检查文件名是否都是数字,否则你会得到一个异常。 –

+0

12115 12116之前不是数字顺序,它是字母顺序。你需要在10之前2对吗? –

回答

0

您可以使用Python标准库中的osos.path函数。

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): 
    ... 
+0

这不会排序数字。 –

1

这样做:

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])) 
+0

按照修改时间排序,而不是按名称排序... –

+1

'name [4:-4]'看起来不对。 –

+0

'>>>“12345678.txt”[4:-4] '5678'' –

1

我的建议:

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)) 

它按目录排序目录列表名称部分的数值(不带扩展名),检查这部分是数字,以避免在转换为整数时出现异常(其他名称 - 如果有的话 - 在开始时留下,并且未排序)

相关问题