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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:17:58