Python使用csv.writer写入爬取的人口数据时数字被拆分多列、城市内容未写入问题
问题根源定位
- 人口数值被拆分为多个独立列:
csv.writer.writerow()要求传入的参数是行内容的序列(列表/元组),序列内每个元素对应CSV的一个单元格。你直接传入search.text字符串,字符串属于可逐字符遍历的可迭代对象,每个字符都会被识别为独立的单元格值,因此才会出现单个字符占一列的情况。 - 城市相关内容未按预期写入:同样是直接传入字符串的问题,城市部分的文本也被拆成了上百个独立字符列。多数CSV查看工具(如Excel)默认仅展示有限列,你很可能没有注意到散落在前列的城市字符,因此误以为这部分内容完全没写入。
修复方案
- 先将固定格式的
search.text拆分为结构化字段:按照换行符拆分后,第一部分就是城市信息,第二部分就是带千分位的人口数值。 - 将拆分后的字段放入列表传入
writerow,同时遵循Python csv模块的官方规范,打开文件时添加newline=''参数,避免出现换行异常。 - 可选:提前写入表头,方便后续查看。
修复后代码:
import csv # 按换行拆分爬取到的固定格式文本 content_lines = search.text.splitlines() city_info = content_lines[0] # 对应 "城市, 州 | Data USA" 部分 population = content_lines[1] # 对应带千分位的人口数值 with open('population.csv', 'w', newline='') as f: thewriter = csv.writer(f) # 写入表头 thewriter.writerow(['城市信息', '人口数值']) # 列表每个元素对应一个单元格,不会被拆分 thewriter.writerow([city_info, population])
如果不需要保留“| Data USA”后缀,可以对城市信息做二次处理:city_info = content_lines[0].split(' | ')[0]
即可仅保留“New Smyrna Beach, FL”这类核心城市信息。
内容的提问来源于stack exchange,提问作者Gustaf
相关产品推荐
相关产品推荐

