Python代码遇TypeError:列表索引需整数/切片而非字符串,求修复
问题
运行以下代码时触发TypeError: list indices must be integers or slices, not str错误,需求是提取文件名中的Unix时间戳转换为年-月格式,并用最新日期生成目标文件名。
原始代码:
import numpy as np import pandas as pd import time from datetime import datetime import os import re df = pd.DataFrame() files = os.listdir('input') arr = [i for i in files if i.endswith('.csv') and 'export_' in i] df = pd.DataFrame({'filename':arr}) res = [] # 报错的代码段 for i in df.index: unix_code = re.findall('\\d+', arr[i]) for x in unix_code: "facturatie_vzs_" + datetime.utcfromtimestamp(unix_code[x]).strftime('%Y-%m') + ".csv" res.append(i)
数据框内容说明:filename列存储的是类似export_1698729600.csv格式的文件名。
报错说明:触发类型错误,提示列表索引必须是整数或切片,不能是字符串。
错误原因
核心问题在报错代码段的循环逻辑:
re.findall('\\d+', arr[i])返回的是字符串列表,比如['1698729600']- 遍历该列表时,
x是列表里的字符串元素(比如'1698729600'),而非索引位置 - 用
unix_code[x]试图用字符串当索引取列表元素,直接触发类型错误 - 额外问题:生成的文件名未存入
res,且时间戳是字符串,无法直接传给utcfromtimestamp
修复后的代码
import pandas as pd from datetime import datetime import os import re # 读取指定目录下符合条件的CSV文件 files = os.listdir('input') valid_files = [f for f in files if f.endswith('.csv') and 'export_' in f] df = pd.DataFrame({'filename': valid_files}) # 提取文件名中的Unix时间戳,转换为年-月格式 df['timestamp'] = df['filename'].apply(lambda x: re.findall(r'\d+', x)[0]) df['year_month'] = df['timestamp'].apply(lambda ts: datetime.utcfromtimestamp(int(ts)).strftime('%Y-%m')) # 获取最新的年月,生成目标文件名 latest_year_month = df['year_month'].max() target_filename = f"facturatie_vzs_{latest_year_month}.csv" print(f"最终生成的文件名:{target_filename}")
修复说明
- 用pandas的
apply替代嵌套循环,代码更简洁高效,符合pandas的使用习惯 - 提取时间戳后转为整数,再传入
utcfromtimestamp处理 - 直接通过
max()获取最新的年月,无需手动比较 - 移除了不需要的
numpy、time库导入,精简依赖
内容的提问来源于stack exchange,提问作者Qukz
相关产品推荐
相关产品推荐

