python - 按数字顺序对文本文件进行排序(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'
解决方案
因为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>
结尾的文件名。
推荐阅读
- codenameone - javax.net.ssl.SSLHandshakeException 错误 -codenameone
- python - 无法理解 LSTM 输出。
- javascript - webgl中的内部计数器?
- react-native - 选项卡内的平面列表未正确呈现
- python - python如何使用带有多个方程的欧拉法
- node.js - 为什么我的 try catch 块没有捕获我的 Promise.promisifyAll 对象抛出的 fs.renameSync 异常
- reactjs - React 代码没有被调用 - React 基础
- php - Facebook Business PHP SDK:无法访问不是由拥有此应用程序的企业管理的对象
- vim - VIM:如何在特定位置打开 NERDTree
- javascript - 视频播放器源更新