python - CSV 作为字节返回而不是字符串 Python
问题描述
我收到的错误是:
_csv.Error:迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?)
我会在我的代码中的哪个位置以文本模式打开文件?
import csv
import urllib.request
import pymysql.cursors
connection = pymysql.connect(host='localhost',
user='',
password='',
db='mydb',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
try:
url = 'https://api.iextrading.com/1.0/stock/market/collection/sector?
collectionName=Health%20Care&format=csv'
response = urllib.request.urlopen(url)
csv_data = csv.reader(response)
for row in csv_data:
cursor.execute('INSERT INTO Financials (names, \
classes, mark )' \
'VALUES("%s", "%s", "%s")',
row)
finally:
connection.close()
解决方案
response = urllib.request.urlopen(url)
这里response
返回一个bytes
对象的迭代器,。
如果你知道 csv 文件只是纯文本,你可以插入一个生成器理解来解码这些行:
csv_data = csv.reader(line.decode() for line in response)
或者map
(你不喜欢 python 3map
时可以使用它lambda
吗?)
csv_data = csv.reader(map(bytes.decode,response))
独立的例子:
import urllib.request,csv
url = 'https://api.iextrading.com/1.0/stock/market/collection/sector?collectionName=Health%20Care&format=csv'
response = urllib.request.urlopen(url)
for row in csv.reader(line.decode() for line in response):
print(row)
现在您正在csv.reader
输入一个字符串列表,这将起作用。
样本输出:
['CAPR', 'Capricor Therapeutics Inc.', 'NASDAQ Capital Market', 'Healthcare', 'close', '0.9011', '1539955800519', '0.875', '1539979200341', '0.9011', '0.8702', '0.875', 'Close', 'October 19, 2018', '1539979200341', '96625', '', '', '', '0.875', '1539979200341', '0.9011', '0.0261', '0.02983', '1539954158310', '0.9011', '-0.0261', '-0.02896', '', '', '106532', '', '', '', '', '26905263', '-1.72', '3.19', '0.851', '-0.4716351592356688']
['AVDL', 'Avadel Pharmaceuticals plc', 'NASDAQ Global Market', 'Healthcare', 'close', '4.24', '1539955800643', '4.1', '1539979200312', '4.24', '4', '4.1', 'Close', 'October 19, 2018', '1539979200312', '78386', '', '', '', '4.1', '1539979200312', '4.2', '0.1', '0.02439', '1539892803066', '4.2', '-0.1', '-0.02381', '', '', '114387', '', '', '', '', '150734712', '-3.8', '11.93', '3.98', '-0.5579009090909092']
推荐阅读
- r - 计算数据框每一列中的问号
- sql - string_agg 忽略列中的特定值
- swift - 核心数据中一对多关系的谓词和排序
- mysql - MySQL 查询 - 如何过滤多个列的一个条件
- gemfire - 在 apache geode 中调用 getall 来获取列表中键的所有数据很慢
- javascript - 提交表单后如何显示 div 或 html 元素并从 Django 中的视图中检索一些信息
- python - TypeError:&:“WebElement”和“WebElement”不支持的操作数类型
- r - 按类别对列表进行相关性检验
- python - keras LSTM 特征维度重要性
- swiftui - SwiftUI,删除VStack中视图之间的空间?