【问题标题】:Python csv writer outputs commas after each letter [closed]Python csv writer在每个字母后输出逗号[关闭]
【发布时间】:2018-08-21 16:41:33
【问题描述】:

我的 csv 文件在每个字母后只有逗号。它将数据写入换行符。我对数据做错了什么?在将每个地址放入列表后,我正在尝试将每个地址写入 csv 中的新行。我尝试了各种不同的方法将数据写入 csv 文件,但没有任何效果。我不知道该怎么做才能使数据写入名称而不是那么多逗号。

import requests
from bs4 import BeautifulSoup
import csv

search_terms = "Bars"
location = "New Orleans, LA"
all_data = []

if ' ' in search_terms:
    search_terms = search_terms.replace(' ', '+')
    print(search_terms)
if ', ' in location:
    location = location.replace(', ', '+')
    print(location)
count = 1

while True:
    page_number = str(count)
    url = "https://www.yellowpages.com/search? search_terms="+search_terms+"&geo_location_terms="+location+"&page="+page_number
    print(url)
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    info = soup.findAll("div", {"class": "info"})
    if soup.findAll("div", {"class": "info"}):
        count = count+1
        for each in info:
            try:
                business_name = each.find(itemprop="name").get_text()
            except:
                business_name = "No Business Name"
            try:
                street = each.find(itemprop="streetAddress").get_text()
            except:
                street = "No Street Address"
            try:
                city = each.find(itemprop="addressLocality").get_text()
            except:
                city = "No City,"
            try:
                state = each.find(itemprop="addressRegion").get_text()
            except:
                state = "No State"
            try:
                zip = each.find(itemprop="postalCode").get_text()
            except:
                zip = "No Zip Code"
            try:
                telephone = each.find(itemprop="telephone").get_text()
            except:
                telephone = "No Telephone"
            business_data = business_name+","+street+","+city+state+","+zip+","+telephone
            business_data = business_data.replace(u'\xa0', u'')
            all_data.append(business_data)
    else:
        break
with open(search_terms+'.csv', 'w+') as wf:
    csv_writer = csv.writer(wf)
    csv_writer.writerow(["Business Name","Street Address", "City", "State", "Zip", "Telephone"])
    for line in all_data:
        csv_writer.writerow(line)
        print(line)

【问题讨论】:

  • 你有 minimal minimal reproducible example 吗?这应该可以在大约 5 行中重现。
  • 请注意,line 是一个字符串,csv_writer.writerow 需要一个列表,因此它将您的字符串分解为字符数组。

标签: python csv writer


【解决方案1】:

writerow 方法需要一个包含行中所有项目的可迭代对象。当您向它传递一个字符串时,它将遍历每个字符并将每个字符视为一个项目。

改为遍历字段,而不是

business_data = business_name+","+street+","+city+state+","+zip+","+telephone
all_data.append(business_data)

你可能想尝试类似的东西

all_data.append([business_name, street, city + state, zip, telephone])

【讨论】:

  • 效果很好,谢谢!
【解决方案2】:

all_data.append(business_data) 将一个字符串附加到 all_data, 所以csv_writer.writerow(line)line 作为字符串,而它期望list。 试试:

for line in all_data:
        array = line.split(',')
        csv_writer.writerow(array)
        print(line)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2021-06-12
    • 1970-01-01
    • 2017-01-01
    • 2016-12-05
    相关资源
    最近更新 更多