python 顺序读取文件夹下面的文件(自定义排序方式)

news/2024/7/19 11:15:33 标签: python, 爬虫

       我们在读取文件夹下面的文件时,有时是希望能够按照相应的顺序来读取,但是 file_lists=os.listdir()返回的文件名不一定是顺序的,也就是说结果是不固定的。就比如读取下面这些文件,希望能够按照图中的顺序进行读取,但是

得到的结果却是这样:

['Comprehensive Risk Report_May 10_ 2019 9-00-39 AM 314.html',

'Comprehensive Risk Report_May 11_ 2019 9-00-40 AM 031.html',

'Comprehensive Risk Report_May 12_ 2019 9-00-42 AM 145.html',

'Comprehensive Risk Report_May 13_ 2019 9-00-43 AM 490.html',

'Comprehensive Risk Report_May 14_ 2019 9-00-13 AM 544.html',

'Comprehensive Risk Report_May 15_ 2019 9-00-23 AM 408.html',

'Comprehensive Risk Report_May 16_ 2019 9-00-34 AM 028.html',

'Comprehensive Risk Report_May 17_ 2019 9-00-36 AM 892.html',

'Comprehensive Risk Report_May 1_ 2019 9-00-05 AM 861.html',

'Comprehensive Risk Report_May 2_ 2019 9-00-36 AM 076.html',

'Comprehensive Risk Report_May 3_ 2019 9-00-40 AM 593.html',

'Comprehensive Risk Report_May 4_ 2019 9-00-46 AM 963.html',

'Comprehensive Risk Report_May 5_ 2019 9-00-50 AM 724.html',

'Comprehensive Risk Report_May 6_ 2019 9-00-53 AM 563.html',

'Comprehensive Risk Report_May 7_ 2019 9-00-54 AM 080.html',

'Comprehensive Risk Report_May 8_ 2019 9-00-37 AM 000.html',

'Comprehensive Risk Report_May 9_ 2019 9-00-37 AM 935.html']

而且在采用 file_lists.sort()  以及 sorted(file_lists()) 后,结果还是如此.

        这是因为文件排序都是按字符串来的,不会特意给你分成数字,根据文件中字符在ascii码中的顺序,并且将字符串中每个字符作比较,得到结果。上面的 11和1_的问题,1相同,而后一位1在_前面,如果换成减号-那它就在1前面,或者将序号放在最后,那排序就正常了,这就是按中间字符排序会出现乱七八糟问题的原因

    这时就需要自己根据文件自定义排序:

# 读取文件并进行排序
filelists = os.listdir(path)
sort_num_first = []
for file in filelists:
sort_num_first.append(int(file.split("_")[1].split(" ")[1])) # 根据 _ 分割,然后根据空格分割,转化为数字类型
sort_num_first.sort()
print(sort_num_first)
sorted_file = []
for sort_num in sort_num_first:
for file in filelists:
if str(sort_num) == file.split("_")[1].split(" ")[1]:
sorted_file .append(file)

思路很简单,就是把文件名根据 _ 和 空格 分割,得到中间的数字,然后进行排序;然后将排好的数字一一对应到相应的文件名,就得到了排好了的文件

 

转载于:https://www.cnblogs.com/BackingStar/p/10923706.html


http://www.niftyadmin.cn/n/1665272.html

相关文章

JSTL C:if/C:if 和C:ForEach/C:ForEach 入门级~

一、<C:If>标签&#xff1a;条件判断语句 <c:if test"${objList.nodetype 1}">上级节点</c:if> test为if语句的判断条件。执行与java中的一致。 简单总结几种判空的处理&#xff1a; 1、集合判空。利用关键字 empty <c:if test"${ emp…

Gerapy 使用详解

原文地址&#xff1a;https://blog.csdn.net/fengltxx/article/details/79894839转载于:https://www.cnblogs.com/phpk/p/10929028.html

BZOJ 4514: [Sdoi2016]数字配对

传送门 要求的即为&#xff0c;在费用不小于0的情况下的最大匹配数。 可转化为费用不大于0&#xff08;负费用&#xff09;的最大匹配。 在每次spfa得到的cost的时候就判断一下加上是否大于0了&#xff0c;如果大于0就可以直接加上答案并返回了。 #include <bits/stdc.h>…

Java开源十年争议不断:其实仍然是“闭源”

2006年11月13日&#xff0c;Sun Microsystems正式宣布Java开源&#xff0c;并希望此举能够让社区帮助进行安全分析、bug报告、增强性能、了解偏僻个案等。 不过&#xff0c;十年过去之后&#xff0c;对于Java开源的争议依旧存在。批评者认为&#xff0c;Java并没有像官方说的那…

python时间日期方法汇总

2019独角兽企业重金招聘Python工程师标准>>> #codingutf-8import time import datetimeif __name__ "__main__":# 今天now datetime.datetime.now()print now.strftime(%Y-%m-%d %H:%M:%S)print "%s-%s-%s %s:%s:%s" % (now.year, now.month,…

lodoop打印控件详解

[java] view plaincopy 注意&#xff1a;使用此打印控件需要引入(在我上传的Demo中都有)&#xff1a; install_lodop32.exe install_lodop64.exe LodopFuncs.js jquery-1.10.0.min.js 具体Demo下载地址: http://download.csdn.net/download/l294333475…

《Storm分布式实时计算模式》——2.6 Puppet的快速入门

本节书摘来自华章计算机《Storm分布式实时计算模式》一书中的第2章&#xff0c;第2.6节,作者&#xff1a;&#xff08;美&#xff09;P. Taylor Goetz Brian O’Neill 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.6 Puppet的快速入门 Puppet是一个IT自动化框架…

Spring Boot @Autowired 没法自动注入的问题

Application 启动类&#xff1a; SpringBootApplication EnableConfigurationProperties ComponentScan(basePackages { "com.testing"}) public class Application {BeanRestTemplate restTemplate() {return new RestTemplate();}public static void main(String[…