首页 > 解决方案 > 拆分文件名和求和索引

问题描述

我有一个文件目录,其格式类似于test_001_3.wav. 第一个数字只是一个 ID,而第二个数字是一个索引。我想遍历这些文件名并对每个 ID 的索引求和。例如,取以下数据

test_001_0.wav
test_001_1.wav
test_001_2.wav
test_002_0.wav
test_002_1.wav

返回将是

total for test_001: 3
total for test_002: 2

我当前的代码如下。它正确地对索引求和,但是我不知道如何使它适用于整个文件名数组。

samples = []
for filename in filenames:
    file_id = filename.split('_')[1].split('.')[0]
    index = filename.split('_')[-1].split('.')[0]
    samples.append([file_id, index])
        
count=0
for sample in samples:
    if sample[0] == '001':
        count+=1

print(samples)  # [['001', '0'], ['001', '1'], ['001', '2'], ['002', '0'], ['002', '1']]   
print(count)    # 3

标签: pythonarraysstringfor-loopindexing

解决方案


如果您想使用 pandas 并假设这是在数据框中,您可以使用以下内容:

df = pd.read_excel('C:\\Users\\\Desktop\\test_xcel.xlsx', index_col=None, header=None)

df[0] = df[0].map(lambda x: str(x)[:-6])
df = df.groupby([0]).size().reset_index(name='count')
print(df)

          0  count
0  test_001      3
1  test_002      2

这一切都假设数据框在 excel 文件中格式化并且不包含列名。

编辑:为了说明您当前对问题的更新,可以试试这个:


for k, g in itertools.groupby(files, key=lambda x:re.search('_(\d+)_', x).group(1)):
    print k, len(list(g))


推荐阅读