You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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格式的文件名。
报错说明:触发类型错误,提示列表索引必须是整数或切片,不能是字符串。

错误原因

核心问题在报错代码段的循环逻辑:

  1. re.findall('\\d+', arr[i])返回的是字符串列表,比如['1698729600']
  2. 遍历该列表时,x是列表里的字符串元素(比如'1698729600'),而非索引位置
  3. 用unix_code[x]试图用字符串当索引取列表元素,直接触发类型错误
  4. 额外问题:生成的文件名未存入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:06:25