首页 > 解决方案 > Python:csv_writer 在单独的单元格中写入 1 个数字问题

问题描述

我已经构建了一个简单的网络爬虫,可以从给定城市名称的网站获取人口。输出为字符串格式:“City, State | Data USA Population”

例如,为 New Smyrna Beach 运行 print(search.text) 会返回字符串:

佛罗里达州新士麦那海滩 | 数据 美国 25,770

我希望程序把它写在一个 csv 文件中,但是当我想在一个单元格中时,这个数字被分成多列。似乎根本没有写“新士麦那海滩,佛罗里达州 | Data USA”,为什么?

这是我编写 csv 的代码:

import csv
with open('population.csv', 'w') as f:
   thewriter = csv.writer(f)
   thewriter.writerow(search.text)

这是我在 CSV 文件中的输出。

2| 5| ,| 7| 7| 0| (每个 | 表示一个新列)我希望 csv 文件像这样在一个单元格中写入 25,770。也不是必需的,但如果程序实际上也写了城市名称,这将很有用。我做错了什么?

标签: pythonseleniumcsvweb-scraping

解决方案


鉴于您无法拆分, 由于您的人口包含逗号和您的城市名称包含空格。我们可以通过几种方式做到这一点。

  1. 对两者执行两次拆分,, 使用列表返回正确的位置slice
  2. 使用正则表达式提取信息

分裂

search = 'New Smyrna Beach, FL | Data USA 25,770'
with open('test.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow([search.split(',')[0], search.split(' ')[-1]])

正则表达式

import re

with open('test.csv', 'w') as f:
    writer = csv.writer(f)
    city = re.match(r'^([^,]*)', search).group(0)
    population = re.findall(r'(\d+,\d+)', search)[0]

    writer.writerow([city, population])

输出

在此处输入图像描述


推荐阅读