如何在字符串列表中隔离字符串的一部分并使用它对列表进行排序?(Python语言)

如何在字符串列表中隔离字符串的一部分并使用它对列表进行排序?(Python语言),python,list,sorting,Python,List,Sorting,我正在尝试编写一个程序,用Python为我绘制许多图形,我的数据都具有相同的名称格式: info_scan1.csv、info_scan2.csv、info_scan3.csv等,其中info是每个文件的不同字符串 我需要成对地绘制数据,即扫描1和2在同一个绘图上,扫描3和4,扫描5和6等。因此,我想在“扫描”之后按int对文件名列表进行排序。我该怎么做 我正在使用list=os.listdir(os.curdir)将所有文件名放在一个列表中 干杯 如果文件名具有相同的数字精度(如果scan09

我正在尝试编写一个程序,用Python为我绘制许多图形,我的数据都具有相同的名称格式:

info_scan1.csv、info_scan2.csv、info_scan3.csv等,其中info是每个文件的不同字符串

我需要成对地绘制数据,即扫描1和2在同一个绘图上,扫描3和4,扫描5和6等。因此,我想在“扫描”之后按
int
对文件名列表进行排序。我该怎么做

我正在使用
list=os.listdir(os.curdir)
将所有文件名放在一个列表中


干杯

如果文件名具有相同的数字精度(如果
scan09.csv
,而不是
scan9.csv
,在
scan10.csv
之前),则简单的
list.sort()
即可。如果没有,那么您要做的就是“自然排序”:google for python recipes。

试试下面的代码:

name_list = ['_scan1.csv','_scan7.csv','_scan3.csv']

f = lambda s: int(s.replace('.csv','').replace('_scan',''))

sorted(name_list,key = f)
['_scan1.csv', '_scan3.csv', '_scan7.csv']

您可以从当前目录获取所有文件:

files = [x for x in os.listdir('.') if os.path.isfile(x)]
所以
files
是目录
中的文件名列表。然后你必须在文件名中间按数字排序这个列表,我看到这个解决方案:

files.sort(key=lambda f: int(re.search("(\d+)", f).group(1)))
这将使用文件名中的数字对就地
文件
列表进行数字排序。然后,您应该在循环中获取此列表中的两个值。模块有配方,其中一个是“grouper函数:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *arg)
因此,您可以:

>>> for f in grouper(files, 2):
...    print f # f here is a tuple of two files. f[0] is the first and f[1] is the second one
... 
('info_scan1.csv', 'info_scan2.csv')
('info_scan3.csv', 'info_scan4.csv')
('info_scan5.csv', 'info_scan6.csv')
('info_scan7.csv', 'info_scan8.csv')
('info_scan9.csv', 'info_scan12.csv')
('info_scan57.csv', 'info_scan58.csv')

您希望我们为您编写代码吗?你试过什么?你能展示你的非工作代码的样本吗?