以折叠方式阅读文件

2024-06-12 06:52:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件夹,里面有一些扩展名为“LRZ\u OA\u 12115.txt”的文件。我有上百个这样名字的档案。任务如下: i) 我想按数字顺序访问每个文件。例如,我希望在LRZ\u OA\u 12116之前有LRZ\u OA\u 12115。 ii)我想访问并阅读本部分:文件夹中每个文件的12115(不是字母表)。你知道吗

我会很感激你的回答。你知道吗

谢谢。你知道吗


Tags: 文件txt文件夹顺序数字档案名字字母表
3条回答

我的建议是:

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

它根据名称部分(没有扩展名)的数字值对目录列表进行排序,检查此部分是否为数字,以避免在转换为整数时出现异常(其他名称-如果有的话-保留在开始处,不进行排序)

可以使用Python标准库中的osos.path函数。你知道吗

for filename in sorted(os.listdir('<your-directory>')):
    name, _ = os.path.splitext(filename)
    # do something with name

正如Jean-Francois Fabre所指出的,这给出了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]))

相关问题 更多 >