Windows环境下Python自动排序脚本报错:字符串索引必须为整数
错误解释与代码修复
错误含义
TypeError: string indices must be integers 这个错误表示:你试图用字符串类型的值作为索引去访问另一个字符串的元素,但字符串仅支持整数类型的索引(比如用contents[0]取第一个字符),用字符串当索引不符合语法规则,因此触发该错误。
代码问题分析
你的代码里导致错误的核心原因是对文件内容的处理逻辑错误:
contents = f.read()将目标文本文件的内容读取成了一个完整的字符串,包含所有行文本和换行符。for file_name in contents:这段代码是在遍历这个字符串的每一个单个字符,而不是遍历文件里的每一行文件名。- 随后的
contents[file_name]中,file_name是单个字符(比如'3'、'm'),你用它作为索引去访问contents字符串,违反了字符串索引必须是整数的规则,因此报错。
修复方案
需要将文件内容按行分割为文件名列表,再遍历列表处理每个文件名:
修改后的关键代码片段
# Open the file and read its contents, split into non-empty lines with open(file_path, 'r') as f: # 按行读取,去除每行的空白字符,同时过滤空行 contents = [line.strip() for line in f if line.strip()] # ... 其他代码保持不变 ... # Find file for file_name in contents: # 直接传入file_name即可,不需要再用contents[file_name] print(find_files(file_name, cwd))
额外优化提示
原代码中os.walk的循环变量dir建议改为dirs(复数形式),这是os.walk的标准参数命名(对应当前目录下的子目录列表),虽然不影响功能,但更符合代码规范:
for root, dirs, files in os.walk(search_path):
内容的提问来源于stack exchange,提问作者Limyx826
相关产品推荐
相关产品推荐

