python - 拆分文件名和求和索引
问题描述
我有一个文件目录,其格式类似于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
解决方案
如果您想使用 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))
推荐阅读
- sql - 在 upsert 的准备好的语句中引用现有参数
- elasticsearch - 弹性搜索。按当月搜索数据
- java - Java Color constructor casts long to float
- java - 在模式匹配中排除数字
- excel - Excel VBA:使用用户窗体选择要运行的宏
- java - Java Scanner 出现在 print() 之前
- python - 带有子文件夹的 Django 视图定义在第二次未正确呈现
- fitnesse - 什么决定了fitSharp runner 域名?
- visual-studio-code - 添加了订阅的功能“supportResettableProperties”,但未设置可重置属性
- bash - 从while循环读取文件没有得到第一行