首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在列表中对文件进行排序

在列表中对文件进行排序
EN

Stack Overflow用户
提问于 2012-02-27 21:44:00
回答 4查看 312关注 0票数 5

假设我有一个文件列表

代码语言:javascript
复制
files = ['s1.txt', 'ai1.txt', 's2.txt', 'ai3.txt']

我需要根据它们的编号将它们分类到子列表中,以便

代码语言:javascript
复制
files = [['s1.txt', 'ai1.txt'], ['s2.txt'], ['ai3.txt']]

我可以写一堆循环,但是我想知道是否有更好的方法来做到这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-27 21:49:15

下面是一个完整的基于defaultdict的工作示例

代码语言:javascript
复制
import re
from collections import defaultdict

files = ['s1.txt', 'ai1.txt', 's2.txt', 'ai3.txt']

def get_key(fname):
   return int(re.findall(r'\d+', fname)[0])

d = defaultdict(list)
for f in files:
   d[get_key(f)].append(f)

out = [d[k] for k in sorted(d.keys())]
print(out)

这会产生以下结果:

代码语言:javascript
复制
[['s1.txt', 'ai1.txt'], ['s2.txt'], ['ai3.txt']]
票数 6
EN

Stack Overflow用户

发布于 2012-02-27 21:46:56

代码语言:javascript
复制
import itertools
import re

r_number = re.compile("^.*([0-9]+).*$")

def key_for_filename(filename):
    # Edit: This doesn't check for missing numbers.
    return r_number.match(filename).group(1)

grouped = [list(v) for k, v in
           itertools.groupby(sorted(files, key=key_for_filename),
                             key_for_filename)]
票数 4
EN

Stack Overflow用户

发布于 2012-02-27 21:48:26

首先,编写一个从文件名中提取数字的函数:

代码语言:javascript
复制
def file_number(name):
    return re.search(r"\d+", "s1.txt").group(0)

(请注意,如果名称中根本没有数字,则此函数将出错。)

使用此函数作为键对列表进行排序:

代码语言:javascript
复制
files.sort(key=file_number)

使用itertools.groupby()按此密钥分组

代码语言:javascript
复制
for number, group in itertools.groupby(files, file_number):
    # whatever
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9466017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档