【问题标题】:Python: csv_writer writing 1 number in separate cells problemPython:csv writer在单独的单元格中写入1个数字问题
【发布时间】:2021-05-15 18:33:28
【问题描述】:

我构建了一个简单的网络爬虫,可以从给定城市名称的网站获取人口。输出为字符串格式: “城市,州|数据美国 人口”

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

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

我希望程序将其写入 csv 文件,但是当我希望将其放在一个单元格中时,该数字被分隔为多列。看来“新士麦那海滩,FL | 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。也不是必需的,但如果程序实际上也写了城市名称,这将很有用。我做错了什么?

【问题讨论】:

  • 你的预期结果仅仅是city, population吗?
  • 是的!主要是我想要一个单元格中的数字,但这种格式也很完美

标签: python selenium csv web-scraping


【解决方案1】:

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

  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])

输出

【讨论】:

    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2022-01-24
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多