Python 3.9 实现xlsx地址列按格式逐行写入CSV并去除多余双引号
脚本修正方案
原脚本核心缺陷
- 地址收集逻辑错误:
address_list.append(original_xl['column_name'])将pandas返回的整列Series对象作为单个元素加入列表,未拆解为独立的单条地址,导致循环无法逐行读取有效地址 - CSV写入逻辑错误:直接将提前用逗号拼接好的整串字符串传入
csv.writer.writerow(),会被CSV模块识别为单个含特殊字符的字段,自动为整段内容添加包裹引号,最终出现"John,Doe,AddressLine1"这类异常输出
修正后完整可运行脚本
import pandas as pd import csv the_xl_file = "mydata.xlsx" # 读取Sheet1的全部内容 original_xl = pd.ExcelFile(the_xl_file).parse('Sheet1') # 直接提取目标列,拆解为单条地址组成的普通Python列表 address_list = original_xl['column_name'].tolist() first_name = "John" second_name = "Doe" # 上下文管理器管理文件句柄,newline参数为CSV写入的标准配置,避免生成多余空行 with open('output.csv', 'w+', newline='') as out_file: # 配置CSV写入规则,仅当字段本身含特殊字符时才添加引号 csv_writer = csv.writer(out_file, quoting=csv.QUOTE_MINIMAL) # 写入表头行 csv_writer.writerow(["firstname_user", "secondname_user", "address"]) # 逐条写入数据,传入独立字段组成的列表,不提前拼接字符串 for address in address_list: csv_writer.writerow([first_name, second_name, str(address).strip()]) print('CSV file created with addresses ...')
关键修改点说明
- 移除了错误的
append操作,通过.tolist()方法直接把Excel列内容拆解为独立地址的列表,保证循环可以逐次读取单个地址写入新行 - 调用
writerow()时传入三个独立字段组成的列表,而非提前拼接好的整段字符串,从根源上避免整段内容被识别为单字段、被自动加引号的问题 - 简化了冗余的文件句柄赋值逻辑,用上下文管理器直接管理文件打开/关闭流程,避免文件泄漏
- 对地址内容做基础的空白字符清理,提升CSV内容的规范性
内容的提问来源于stack exchange,提问作者TheWaterProgrammer
相关产品推荐
相关产品推荐

