Skip to main content
 首页 » 编程设计

python之在 python 中按数字对字符串列表进行排序

2025年05月04日33落叶无声

我确实想读取一些 .csv 文件并打印第 5 列的最小值和最大值。我还想打印在哪个文件中可以找到最大值或最小值。

我的代码现在是:

import pandas, glob 
import numpy as np 
 
path = "/home/path/to/log/" 
 
fn = glob.glob(path + "*.csv")  
list_of_dfs = [pandas.read_csv(filename, header=None) for filename in fn] 
k = len(list_of_dfs) 
b = np.zeros((k, 1)) 
cnt = 0  
for i in list_of_dfs: 
    b[cnt,0] = np.min(i[4]) 
    cnt = cnt + 1 
print(np.min(b[:,0])) 
print(np.argmin(b[:,0])) 

我的 .csv 文件命名如下:

0.csv, 1.csv ... 10.csv ...2463.csv

在看到我的 argmin 没有显示正确的文件后,我意识到 fn 没有排序。我找到了这个 Sort filenames in directory in ascending order ,解决方案是:

fn.sort(key=lambda f: int(filter(str.isdigit, f))) 

但是在这一行中我得到了以下错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'filter' 

有什么建议吗?

请您参考如下方法:

我认为需要 sorted 将文件名转换为 integer:

fn = ['0.csv', '1.csv', '2463.csv', '10.csv'] 
 
fn = sorted(fn, key=lambda f: int(f.split('.')[0])) 
print (fn) 
['0.csv', '1.csv', '10.csv', '2463.csv'] 

如果有完整路径:

print (fn) 
['files\\1.csv', 'files\\10.csv', 'files\\2.csv'] 
 
fn = sorted(fn, key=lambda f: int(os.path.basename(f).split('.')[0])) 
print (fn) 
['files\\1.csv', 'files\\2.csv', 'files\\10.csv']