为何Fort Worth.txt仅写入1行而非2行?如何修复Python文件写入问题
问题原因与解决方法
问题根源
你的代码里每次打开输出文件时用了'w'(写入)模式,这个模式的行为是:如果文件已经存在,就先清空里面的所有内容,再写入当前行。所以当第二次处理Fort Worth的记录时,第一次写入的内容被直接覆盖了,最终文件里只留下最后一次写入的那一行。
另外还要提个隐藏问题:你原代码用了line.split('\t'),但提供的purchases.txt内容是用空格分隔的,而且Fort Worth是包含空格的城市名,直接按制表符分割会完全提取错误的城市名,这也是需要修正的点。
解决办法
把打开文件的模式改成'a'(追加)模式,这个模式会保留文件原有内容,将新行追加到文件末尾,同时调整城市名的提取逻辑。
基础修改版代码
with open('purchases.txt') as input_file: for line in input_file: # 按空格分割后,城市名是第3、4个元素(索引2、3),需要拼接起来 parts = line.split() city = ' '.join(parts[2:4]) # 用追加模式打开文件 with open(f'{city}.txt', 'a') as output_file: output_file.write(line)
优化版(减少重复IO操作)
如果purchases.txt内容很大,每次循环都打开关闭文件会影响效率,我们可以用字典缓存已经打开的文件对象,最后统一关闭:
file_handles = {} try: with open('purchases.txt') as input_file: for line in input_file: parts = line.split() city = ' '.join(parts[2:4]) if city not in file_handles: # 用追加模式打开并缓存文件对象 file_handles[city] = open(f'{city}.txt', 'a') file_handles[city].write(line) finally: # 遍历关闭所有打开的文件 for fh in file_handles.values(): fh.close()
模式说明
'w':写入模式,创建新文件(或清空已有文件)后写入内容'a':追加模式,在已有文件末尾添加内容,文件不存在则创建
内容的提问来源于stack exchange,提问作者john tan
相关产品推荐
相关产品推荐

