gpt4 book ai didi

python - 以与目录中相同的顺序输出文件名 - Python

转载 作者:行者123 更新时间:2023-12-01 02:26:30 25 4
gpt4 key购买 nike

我正在尝试创建一个 .txt 文件,该文件读取给定目录中的所有文件名,并将不带文件扩展名的名称输出到新的 .txt 文件中。例如:如果我的/images 目录有 img_1.jpg、img_2.jpg、img_4.jpg、img_4.jpg 那么此脚本将创建一个 txt 文件,其中包含 img1、img2、img3、图像4我有一个脚本可以很好地创建 txt 文件,但是名称的输出顺序与我的目录中图像的放置顺序不同。

import os    
files_no_ext = [".".join(f.split(".")[:-1]) for f in os.listdir() if os.path.isfile(f)]

with open('trainval.txt', 'w') as f:
for s in files_no_ext:
f.write("%s\n" % s)

图像目录中的图像按以下顺序排列:

banana-0.jpg
banana-1.jpg
banana-2.jpg
.
.
banana-1000.jpg

但是 .txt 文件中的输出是:

banana-0
banana-1
banana-10
banana-100
banana-1000
banana-1001
banana-1002
banana-1003
banana-1004
banana-1005
banana-1006
banana-1007
banana-1008
banana-1009

如何确保输出的顺序与目录中图像的顺序相同?

最佳答案

listdir() 保留文件系统的顺序。

参见:

Python - order of os.listdir

Nonalphanumeric list order from os.listdir() in Python

要根据文件名中的数值对列表进行排序:

使用sortedregex对文件名的数值进行排序。

import re
import os

files_no_ext = [".".join(f.split(".")[:-1]) for f in os.listdir() if os.path.isfile(f)]

files_no_ext = sorted(files_no_ext , key=lambda x: (x, int(re.sub('\D','', x)), x))

with open('trainval.txt', 'w') as f:
for s in files_no_ext:
f.write("%s\n" % s)
# Could also do: f.write("\n".join(files_no_ext))

open() 上使用 mode="a" 也可能更好(mode="a" 表示追加)

关于python - 以与目录中相同的顺序输出文件名 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47338057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com