如何解决CSV写入时字符串被按字符拆分、以逗号分隔的问题
解决CSV写入时字符串被按字符拆分的问题
这问题我之前处理过,其实核心是没搞清楚csv.writer.writerow()的参数要求~
问题原因
csv.writer的writerow()方法接受的是序列类型(比如列表、元组)作为参数。如果你直接传入一个字符串,Python会把字符串当成「字符的序列」来处理,所以每个字符都会被拆分成单独的列,就出现了你看到的n,a,m,e这种情况。
修复方案
只需要把传入writerow()的字符串包装成列表就行:
- 表头部分:把
writer.writerow('name')改成writer.writerow(['name']) - 写入店铺名称时:把
writer.writerow(item)改成writer.writerow([item])
修改后的完整代码
import requests import sys import csv bus = [] url = 'https://api.yelp.com/v3/businesses/search' api_key = '**censored**' headers = { 'Authorization':'Bearer ' + api_key } params = { 'term': 'coffee', "location": sys.argv[1] } response = requests.get(url, headers=headers, params=params) businesses = response.json()['businesses'] for business in businesses: bus.append(business['name']) print('The top 10 coffee shops are: ') for item in bus[0:10]: print(item) with open('coffee_shops.csv', 'w+', newline='') as file: # 加上newline=''避免Windows下多出空行 writer = csv.writer(file) writer.writerow(['name']) # 将表头包装成列表 for item in bus: writer.writerow([item]) # 每个店铺名称也包装成列表
额外小提示
建议在打开文件时加上newline=''参数,这是csv模块官方推荐的写法,可以避免在Windows系统下写入的CSV出现多余的空行。另外你代码里的final列表操作没有实际作用,可以考虑删掉,不影响功能。
内容的提问来源于stack exchange,提问作者Amen
相关产品推荐
相关产品推荐

