如何在字符串列表中隔离字符串的一部分并使用它对列表进行排序?(Python语言)
我正在尝试编写一个程序,用Python为我绘制许多图形,我的数据都具有相同的名称格式: info_scan1.csv、info_scan2.csv、info_scan3.csv等,其中info是每个文件的不同字符串 我需要成对地绘制数据,即扫描1和2在同一个绘图上,扫描3和4,扫描5和6等。因此,我想在“扫描”之后按如何在字符串列表中隔离字符串的一部分并使用它对列表进行排序?(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
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')
您希望我们为您编写代码吗?你试过什么?你能展示你的非工作代码的样本吗?