You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按字典序排序列表?物理项目glob读文件排序失效求助

嘿,我来帮你搞定这两个问题!

1. 如何按字典序对列表进行排序?

Python里实现字典序排序超简单,直接用内置的sorted()函数就行——它默认的排序规则就是字典序(基于ASCII字符顺序):

  • 如果你想得到一个新的排序后的列表,不修改原列表:
    my_list = ["banana", "apple", "cherry", "date"]
    sorted_list = sorted(my_list)
    # 输出: ["apple", "banana", "cherry", "date"]
    
  • 如果你想直接修改原列表,用列表的.sort()方法:
    my_list = ["banana", "apple", "cherry", "date"]
    my_list.sort()
    # 此时my_list已经变成排序后的样子
    

要是你需要忽略大小写的字典序排序,给sorted()或者.sort()加个key参数就行:

my_list = ["Banana", "apple", "Cherry"]
sorted_list = sorted(my_list, key=str.lower)
# 输出: ["apple", "Banana", "Cherry"]
2. 解决glob读取文件后的排序问题

你遇到的问题很常见:glob.glob('*.txt')返回的文件顺序是系统默认的文件排序,而直接用sorted()的话,它会按字符串字典序排——如果文件名里有数字,比如file1.txt、file10.txt、file2.txt,字符串排序会把file10.txt放在file2.txt前面,这显然不是你要的顺序。

咱们可以给sorted()加一个自定义的key参数,提取文件名里的数字作为排序依据,这样就能按数字大小排了:

情况1:文件名是纯数字+后缀(比如1.txt、2.txt)

直接拆分文件名取数字部分:

lijst = sorted(glob.glob('*.txt'), key=lambda x: int(x.split('.')[0]))

情况2:文件名带前缀(比如exp_01.txt、measurement_3.txt)

用正则表达式提取文件名里的数字更稳妥,先导入re库:

import re

lijst = sorted(glob.glob('*.txt'), key=lambda x: int(re.search(r'\d+', x).group()))

这个正则会匹配文件名里的连续数字,不管数字在什么位置,都能准确提取出来作为排序依据。

把这个修改加到你的代码里,之后遍历lijst读取文件,顺序就正常啦!比如修改后的代码片段:

#importeren van libraries
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import glob
import re  # 新增正则库

#definieren van de lijsten
i = 0
R1 = []
I1 = []
U1 = []
stdI = []
stdU = []

# 按文件名中的数字排序,解决顺序混乱问题
lijst = sorted(glob.glob('*.txt'), key=lambda x: int(re.search(r'\d+', x).group()))

# 接下来继续你的文件读取、均值提取和绘图逻辑就行

内容的提问来源于stack exchange,提问作者Ulaş Demirtaş

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:34:35