CSV 应该返回字符串,而不是字节错误
Posted
技术标签:
【中文标题】CSV 应该返回字符串,而不是字节错误【英文标题】:CSV Should Return Strings, Not Bytes Error 【发布时间】:2016-05-01 20:06:19 【问题描述】:我正在尝试从与我的 Python 脚本不同的目录中读取 CSV 文件。
此外,CSV 文件存储在具有完全相同名称的 ZIP 文件夹中(唯一的区别是一个以 .zip 结尾,另一个是以 .csv 结尾)。
目前我正在使用 Python 的 zipfile
和 csv
库来打开并从文件中获取数据,但是我收到了错误:
Traceback (most recent call last): File "write_pricing_data.py", line 13, in <module>
for row in reader:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
我的代码:
import os, csv
from zipfile import *
folder = r'D:/MarketData/forex'
localFiles = os.listdir(folder)
for file in localFiles:
zipArchive = ZipFile(folder + '/' + file)
with zipArchive.open(file[:-4] + '.csv') as csvFile:
reader = csv.reader(csvFile, delimiter=',')
for row in reader:
print(row[0])
我该如何解决这个错误?
【问题讨论】:
您是否在文本编辑器中打开文件以确保内容与您预期的一样? 是的,它们相当大,但仍然是标准的 csv、逗号分隔符等等。 发布错误的完整回溯可能会对您有所帮助。 好的,我更新了我的帖子。 改为这样打开:with zipArchive.open(file[:-4] + '.csv', 'rt') as csvFile:
【参考方案1】:
这有点杂乱无章,我相信有更好的方法(这恰好让我无法理解)。如果您没有嵌入新行,那么您可以使用:
import zipfile, csv
zf = zipfile.ZipFile('testing.csv.zip')
with zf.open('testing.csv', 'r') as fin:
# Create a generator of decoded lines for input to csv.reader
# (the csv module is only really happy with ASCII input anyway...)
lines = (line.decode('ascii') for line in fin)
for row in csv.reader(lines):
print(row)
【讨论】:
以上是关于CSV 应该返回字符串,而不是字节错误的主要内容,如果未能解决你的问题,请参考以下文章
将 .csv 文件从 URL 读取到 Python 3.x - _csv.Error:迭代器应返回字符串,而不是字节(您是不是以文本模式打开文件?)
使用 csv_from_result 在 CSV 导出中返回字符串而不是数据库条目
SWIG 'cstring.i' Python 返回字节类型而不是字符串类型