我有下面的列表,我想根据文本的'2020.0x'切片进行分组。
mylist = ['c-2020.09.25.tif', 'c-.2020.09.12.masked.tif', 'c-.2020.09.13.masked.tif', 'c-.2020.09.26.masked.tif', 'c-.2020.08.11.masked.tif', 'c-.2020.07.24.masked.tif', 'c-.2020.07.16.masked.tif', 'c-.2020.07.09.masked.tif', 'c-.2020.08.21.masked.tif', 'c-.2020.8.09.masked']
到目前为止我所做的是:
import itertools
key = lambda x: x[2:9]
for key, group in itertools.groupby(mylist, key):
print([str(list(group))])
但是我得到了一个混乱的结果,一点也不像我期望的那样。任何想法都是欢迎的!
您需要将输入排序为groupby,否则组将被其他组分开(这与bash中的sort
和uniq
的工作方式相同)。此外,key=
函数需要处理以"开头的文件名。c-.
";和";c-
";
import itertools
def get_year_and_month(filename):
year, month, day, *rest = filename.split('-')[1].lstrip('.').split('.')
return int(year), int(month) # convert to int to handle missing leading 0
mylist = sorted(mylist, key=get_year_and_month)
for key, group in itertools.groupby(mylist, key=get_year_and_month):
print(list(group))