使用re.sub时报TypeError: 'list'对象无法被解析为整数如何解决?
问题根因
re.sub(pattern, repl, string) 要求第三个入参必须是单个字符串,你传入的Menu_choices是random.sample()返回的列表,类型不匹配才会抛出TypeError,和该方法的返回值无关。同时你原本写的正则规则也不符合「去掉行前半部分」的需求,r'.*?'是非贪婪匹配,最短匹配结果为空,替换成'I'的话只会给所有字符前插入'I',达不到剔除内容的效果。
修正方案
你只需要遍历Menu_choices的每个元素,逐行做正则替换再写入购物清单文件即可,不需要更换实现思路。另外建议用with关键字管理文件句柄,不用手动调用close(),也能避免你原代码中MyFile.close漏写括号导致文件没有正常关闭的问题。
修正后代码示例:
import random import re # 此处默认你已提前正确加载sample_list,每条数据结构示例:「菜名: 原料1,原料2,原料3」 Menu_choices = random.sample(sample_list, k=6) # 写入菜单输出文件 with open('MenuOutput.txt', 'w', encoding='utf-8') as menu_file: for element in Menu_choices: menu_file.write(element) # 写入购物清单输出文件 with open('ShoppingOutput.txt', 'w', encoding='utf-8') as shop_file: for element in Menu_choices: # 正则规则可根据你的实际条目格式调整,示例是匹配行开头到第一个冒号及后面的空格,替换为空 shopping_line = re.sub(r'^.*?:\s*', '', element) shop_file.write(shopping_line)
可选优化
如果你的条目结构固定,用固定分隔符(如冒号、制表符)区分菜名和原料,可不用正则,用字符串分割更简单稳定:
# 替换上面的正则行即可,按第一个冒号分割取后半部分,去掉前后空白 shopping_line = element.split(':', 1)[1].strip()
内容的提问来源于stack exchange,提问作者GorillaHead
相关产品推荐
相关产品推荐

