使用readlines()将模板TXT文件写入10个新文件时遇执行问题
问题分析与修复方案
嘿,我一眼就看出问题所在啦——你这段代码跑不起来,是因为你试图把一个列表直接传给write()方法,而Python的文件对象write()方法只接受字符串类型的参数,根本不知道怎么处理列表!
错误根源
你用readlines()读取模板文件后,得到的file_lines是一个包含每行内容的列表(哪怕你用rstrip('\n')处理了每行换行符,它依然是列表类型)。当你执行new_file.write(file_lines)时,Python就会抛出TypeError: write() argument must be str, not list的错误。
两种修复方案
方案1:把列表拼接成字符串后写入
我们可以用'\n'.join(file_lines)把列表里的每行内容重新用换行符拼接成完整的字符串,这样就符合write()的参数要求了。另外推荐你用with语句来操作文件,它会自动帮你关闭文件,比手动调用close()更安全可靠:
# 读取模板文件 with open('template.txt', 'r') as template_file: file_lines = template_file.readlines() file_lines = [line.rstrip('\n') for line in file_lines] # 循环生成10个新文件 for i in range(10): with open(f'output_{i}', 'w') as new_file: # 把列表拼接成字符串,每行用换行符分隔 new_file.write('\n'.join(file_lines))
方案2:使用writelines()方法写入列表
文件对象还有个writelines()方法,它专门接受字符串列表作为参数。不过要注意:如果你之前用rstrip('\n')去掉了每行的换行符,需要手动加回去,否则所有内容会挤在一行;或者你可以直接保留readlines()读取到的换行符:
# 读取模板文件(保留每行的换行符) with open('template.txt', 'r') as template_file: file_lines = template_file.readlines() # 每行末尾自带\n # 循环生成10个新文件 for i in range(10): with open(f'output_{i}', 'w') as new_file: new_file.writelines(file_lines)
内容的提问来源于stack exchange,提问作者arsenal88
相关产品推荐
相关产品推荐

