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

Python遍历地址文件未循环后续内容,计数器重置失效问题

问题分析与修复

核心错误点

  • 计数器重置逻辑错误:line_counter == 1是比较运算符,无法完成赋值,应该改为line_counter = 1,这是导致计数器持续递增、后续地址解析逻辑永远不触发的核心原因。
  • 地址变量未重置:处理完一组地址后,new_address没有清空,导致后续循环一直复用第一组地址的内容。
  • 城市索引计算偏差:使用原始行each_line的长度计算city_end,但原始行包含换行符,会导致索引计算错误,应该用去除空白后的city_state_zip长度来计算。
  • 表头可能重复写入:原逻辑中表头会在line_counter == 0时写入,若计数器正常重置会重复写入表头,需将表头写入放在循环外部。
  • 文件操作效率低下:每次调用save_file都打开/关闭文件,频繁IO操作影响性能。

修正后的代码

starter_file = 'addresses.csv'
output_file = 'new_address.csv'

def save_file(filename, file_mode, content):
    with open(filename, mode=file_mode, encoding='utf-8') as f:
        f.write(content)

# 提前写入表头,确保只执行一次
save_file(output_file, 'w', 'street, city, state, zip, coordinates\n')

line_counter = 1  # 直接从第一行地址开始计数
new_address = ''

with open(starter_file, mode='r') as map_data:
    for each_line in map_data.readlines():
        # 跳过空行,避免干扰计数逻辑
        if not each_line.strip():
            continue

        if line_counter == 1:   # 处理街道行
            new_address = each_line[1:].strip()

        elif line_counter == 2:   # 处理城市、州、邮编行
            city_state_zip = each_line.strip()
            # 用处理后的字符串长度计算,排除换行符干扰
            city_end = len(city_state_zip) - 8
            city = city_state_zip[:city_end].strip()
            state = city_state_zip[city_end:city_end+2].strip()
            zip_code = city_state_zip[-5:].strip()
            new_address = f"{new_address}, {city}, {state}, {zip_code}"

        elif line_counter == 3:   # 处理坐标行
            coordinates = each_line.strip().replace(',', ';')
            new_address = f"{new_address}, {coordinates}\n"
            save_file(output_file, 'a', new_address)
            # 重置计数器和地址变量,准备处理下一组地址
            line_counter = 0
            new_address = ''

        print(f'#{line_counter} >> ', new_address)
        line_counter += 1

关键修改说明

  • 修复计数器赋值:处理完坐标后将计数器重置为0,加1后回到1,重新开始下一组地址的解析。
  • 清空地址变量:每完成一组地址写入后,清空new_address,避免旧内容残留。
  • 修正索引计算:使用len(city_state_zip)替代原始行长度,排除换行符对索引的影响。
  • 表头单独写入:在循环前一次性写入表头,避免重复写入。
  • 添加空行过滤:跳过文件中的空行,防止无效行打乱计数逻辑。
  • 优化字符串拼接:使用f-string替代传统拼接方式,让代码更简洁易读。

修复后程序会正确遍历每一组地址(每3行一组),依次解析街道、城市州邮编、坐标,写入新文件后自动重置状态,处理下一组地址,不会再重复输出第一组内容。

内容的提问来源于stack exchange,提问作者Sabrina Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:54:19