我正在尝试创建一个.txt文件,该文件读取给定目录中的所有文件名,并将没有文件扩展名的名称输出到新的.txt文件中。如果我的/images目录有img_1.jpg, img_2.jpg, img_4.jpg, img_4.jpg,那么这个脚本将创建一个具有img1, img2, img3, img4的txt文件--我的脚本在创建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如何确保输出与目录中图像的顺序相同?
发布于 2017-11-16 19:59:27
listdir()保留file system的顺序。
请参见:
Nonalphanumeric list order from os.listdir() in Python
要根据文件名中的数值对列表进行排序:
使用sorted和regex对文件名的数值进行排序。
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))在mode="a"上使用open()也可能更好(mode="a"的意思是附加)
https://stackoverflow.com/questions/47338057
复制相似问题