首页 > 解决方案 > 按数字顺序对文本文件进行排序(Python)

问题描述

脚本问题描述

您好,我是使用 Python 的新手,但在排序文件时遇到问题。我有多个文本格式的文件,从 0 到 20,但是当我对它们进行排序时,它们按以下顺序排列:0、1、11、12 ......尽管有 0、1、2、3 ......我尝试了多种发现在这里,但它不工作。请问你能帮帮我吗?

data_dir = 'Data_CO2/'
folder = '01-15-2020-B/'
dir_folder = data_dir+folder
files = os.listdir(dir_folder)
files_20 = []
for ff in files:
    if 'TPD' in ff: 
        files_20.append(ff)

files_20.sort()
files_20 

Output : 
'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-0.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-1.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-10.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-11.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-12.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-13.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-14.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-15.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-16.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-17.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-18.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-19.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-2.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-20.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-3.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-4.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-5.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-6.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-7.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-8.DPT',
 'TPD at 1K.min from 26K to 120K-CsI 335deg, 1cm-1, 64 scans -CO2 CH4 mix -01-15-2020-9.DPT'

标签: pythonsorting

解决方案


因为sort正在处理一堆字符串,所以它将按字母顺序排序。如果您想根据“索引”进行排序,您可以执行以下操作:

def get_index(file_name: str):
    indexed_extension = file_name.split("-")[-1]
    index = indexed_extension.split(".")[0]

    return int(index)

其次是

files_20.sort(key=get_index)

这适用于任何日期(不仅仅是01-15-2020)。它依赖于以 a-<index>.<extension>结尾的文件名。


推荐阅读