首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出文件名的顺序与目录- Python中相同

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

Stack Overflow用户
提问于 2017-11-16 19:55:02
回答 1查看 613关注 0票数 2

我正在尝试创建一个.txt文件,该文件读取给定目录中的所有文件名,并将没有文件扩展名的名称输出到新的.txt文件中。如果我的/images目录有img_1.jpg, img_2.jpg, img_4.jpg, img_4.jpg,那么这个脚本将创建一个具有img1, img2, img3, img4的txt文件--我的脚本在创建txt文件方面做得很好,但是输出名称的顺序与我目录中图像的放置顺序不同。

代码语言:javascript
复制
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)

图像目录按以下顺序显示图像:

代码语言:javascript
复制
banana-0.jpg
banana-1.jpg
banana-2.jpg
.
.
banana-1000.jpg

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

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-16 19:59:27

listdir()保留file system的顺序。

请参见:

Python - order of os.listdir

Nonalphanumeric list order from os.listdir() in Python

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

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

代码语言:javascript
复制
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"的意思是附加)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47338057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档