在进入正题之前,先介绍一下基础知识:

1、sort(),方法:就是对列表内容进行正向排序,直接在原列表进行修改,返回的是修改后的列表

  1. lists =[1, 5, 10, 8, 6]
    lists.sort()
    print(lists)
    >>> [1, 5, 6, 8, 10]

2、sorted() 方法: 对列表进行排序后,返回一个新的列表,而原列表不变。并且sorted()方法可以用在任何数据类型的序列中,而返回的总是一个列表的形式。

  1. lists = [1, 5, 10, 8, 6]
  2. a = sorted(lists)
  3. print(lists)
  4. >>>[1, 5, 10, 8, 6]
  5. print(a)
  6. >>>[1, 5, 6, 8, 10]

3、进行多条件排序,使用参数 key 即可,其返回的顺序就是按照元组的顺序 。如果想要第一个顺序,第二个逆序,只需要在 x[1] 前面加上 -x[1]

  1. lists = [(2, 5), (2, 3), (1, 2), (4, 2), (3, 4)]
  2.  
  3. lists.sort(key=lambda x: (x[0], x[1]))
  4.  
  5. print(lists)
  6. >>>[(1, 2), (2, 3), (2, 5), (3, 4), (4, 2)]

好,介绍完之后,下面进入正题,自定义顺序 读取文件 多条件排序。

如图,要让下面这些文件进行自己想要的顺序排序,首先根据月份排,然后依据日期排;即先五月,从 5_1 到 5_15,然后再到 6_1 ,如果只是单纯的采用 sort() 和sorted()肯定是不能实现的,需要自定义方式,进行排序。

那么怎么来排序呢?

思路就是: 先对文件进行分割,得到 月份 和 天数,然后利用sort() 的key值,进行排序。

  1. import os
  2.  
  3. path = '..\\url\\'
  4. file_selected = os.listdir(path)
  5. month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  6.  
  7. file_tem = []
  8. file_comp = []
  9. for file in file_selected:
  10. file_tem.append(file) # [file]
  11. value = file.split("_")[1].split(" ")[0]
  12. ind = month.index(value) # 得到月份的下标
  13. file_tem.append(ind) # [file,ind]
  14. num = int(file.split("_")[1].split(" ")[1]) # 得到天数
  15. file_tem.append(num) # [file,ind,num]
  16. file_comp.append(file_tem) # 得到[[file,ind,num],[file2,ind2,num2]]的形式
  17. file_tem = []
  18.  
  19. file_comp.sort(key=lambda x: (x[1], x[2])) # 根据ind排,再根据num2 排
  20. sorted_file = [x[0] for x in file_comp]
  21.  
  22. print(sorted_file)

最终得到结果:

  1. ['Comprehensive Risk Report_May 1_ 2019 9-00-36 AM 076.html',
  2. 'Comprehensive Risk Report_May 2_ 2019 9-00-36 AM 076.html',
  3. 'Comprehensive Risk Report_May 3_ 2019 9-00-40 AM 593.html',
  4. 'Comprehensive Risk Report_May 4_ 2019 9-00-46 AM 963.html',
  5. 'Comprehensive Risk Report_May 5_ 2019 9-00-50 AM 724.html',
  6. 'Comprehensive Risk Report_May 6_ 2019 9-00-53 AM 563.html',
  7. 'Comprehensive Risk Report_May 7_ 2019 9-00-54 AM 080.html',
  8. 'Comprehensive Risk Report_May 8_ 2019 9-00-37 AM 000.html',
  9. 'Comprehensive Risk Report_May 9_ 2019 9-00-37 AM 935.html',
  10. 'Comprehensive Risk Report_May 10_ 2019 9-00-39 AM 314.html',
  11. 'Comprehensive Risk Report_May 11_ 2019 9-00-40 AM 031.html',
  12. 'Comprehensive Risk Report_May 12_ 2019 9-00-42 AM 145.html',
  13. 'Comprehensive Risk Report_May 13_ 2019 9-00-43 AM 490.html',
  14. 'Comprehensive Risk Report_May 14_ 2019 9-00-13 AM 544.html',
  15. 'Comprehensive Risk Report_May 15_ 2019 9-00-23 AM 408.html',
  16. 'Comprehensive Risk Report_Jun 1_ 2019 9-00-27 AM 541.html']

这里为什么采用  file_tem = [ ] 而不是采用 file_tem.clear(),将在下一篇介绍。

python对目录下的文件进行 多条件排序的更多相关文章

  1. Python打开目录下所有文件

    用Python打开指定目录下所有文件,统计文件里特定的字段信息. 这里是先进入2017-02-25到2017-03-03目录,然后进入特定IP段目录下,最后打开文件进行统计 import os, gl ...

  2. Python遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例

    遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例: #-*- encoding: utf-8 -*- __author__ = 'liudong' import linecache,sys ...

  3. Python语言获取目录下所有文件

    #coding=utf-8# -*- coding: utf-8 -*-import osimport sysreload(sys) sys.setdefaultencoding('utf-8') d ...

  4. Python遍历目录下xlsx文件

    对指定目录下的指定类型文件进行遍历,可对文件名关键字进行条件筛选 返回值为文件地址的列表 import os # 定义一个函数,函数名字为get_all_excel,需要传入一个目录 def get_ ...

  5. python遍历目录下所有文件

    # -*- coding:utf-8 -*- import os if __name__ == "__main__": rootdir = '.\data' list = os.l ...

  6. python获取目录下所有文件

    #方法1:使用os.listdir import os for filename in os.listdir(r'c:\\windows'): print filename #方法2:使用glob模块 ...

  7. python拷贝目录下的文件

    #!/usr/bin/env python # Version = 3.5.2 import shutil base_dir = '/data/media/' file = '/backup/temp ...

  8. python 读取目录下的文件

    参考方法: import os path = r'C:\Users\Administrator\Desktop\file' for filename in os.listdir(path): prin ...

  9. Python递归遍历目录下所有文件

    #自定义函数: import ospath="D:\\Temp_del\\a"def gci (path): """this is a stateme ...

随机推荐

  1. Apache虚拟机的配置文件解说

    1.为了方便管理虚拟主机,我决定使用一种方法,那就是修改httpd-vhosts.conf文件. 第一步首先要使扩展文件httpd-vhosts.conf生效: 1. 打开 apache/conf/h ...

  2. Selenium&Pytesseract模拟登录+验证码识别

    验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...

  3. JavaIO 流(1)IO流介绍

    IO流定义: 流的本质是一组单向有序,分起始和终止的数据传输过程.需要导入import java.io.* IO流分类: 按数据类型分为:字节流和字符流 字节流: 按字节进行读取(可以处理任意类型数据 ...

  4. Pip安装TensorFlow报错:MemoryError

    问题描述 使用pip安装TensorFlow时,一直报错,情况如下: 解决办法 使用如下命令可正常安装: pip3 install --no-cache-dir tenstoflow --no-cac ...

  5. const define static extern

    const const意味着"只读",欲阻止一个变量被改变,可以使用const关键字 const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p) define #define ...

  6. Shell之Here Document

    EOF本意是 End Of File,表明到了文件末尾. 使用格式基本是这样的: 命令 << EOF 内容段EOF将“内容段”整个作为命令的输入.你的代码里就是用cat命令读入整段字符串并 ...

  7. IP 数据报

    IP 数据报 1.IP 数据报的格式 一个 IP 数据报由首部和数据两部分组成.(数据报也可以说是数据包) 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的. 在首部的固定部分 ...

  8. 利用canvas绘画二级树形结构图

    上周需要做一个把页面左侧列表内容拖拽到右侧区域,并且绘制成关系树的功能.看了设计图,第一反应是用canvas绘制关系线.吭哧吭哧搞定这个功能后,发现用canvas绘图,有一个很严重的缺陷.那就是如果左 ...

  9. jsvascript篮球梦

    首先让我们先欣赏一下效果图: html文本: <div class="box"> <img id="imgshow" src="la ...

  10. python正则表达式之re模块使用

    python第一个正则表达式 https://www.imooc.com/learn/550 r'imooc'  Pattern Match result In [2]: import re In [ ...