如何按字典序排序列表?物理项目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ş
相关产品推荐
相关产品推荐

