python – 如何读取包含井号的CSV文件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何读取包含井号的CSV文件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1857字,纯文字阅读大概需要3分钟。
内容图文
我的文件在开头有一个NUL字节,我用“£”符号挣扎
data_initial = codecs.open(filename, "rU", "utf-16")
data = csv.DictReader((line.replace('\x00','') for line in data_initial), delimiter="\t")
for row in data:
print row
我收到错误:
UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\xa3′ in
position 169: ordinal not in range(128)
顺便说一句:如果我尝试打印这条线是否无关紧要.我只能打印’1′,错误保持不变.我不知道为什么它说它是一个编码错误,当它可能是一个解码错误.
无论如何,我该如何处理这个问题?
解决方法:
我假设你在这里使用Python 2.7.在Python 2.7下,CSV不支持python unicode字符串.您必须以原始二进制文件读取文件,然后在csv返回后解码字符串.您正在阅读文件时无法对文件进行解码,并希望csv能够处理它;我的经验是它不会应付.
这在Python 3.x中非常不同,其中csv支持Unicode,并且必须在csv读取数据之前进行解码.或者它不起作用.
两种情况之间存在如此大的差异,这有点令人讨厌.
我的旧版但经过测试的代码适用于所有Python版本看起来像(怀疑你应该能够用你想要的任何东西替换“ascii”).是的,只是注意到一些断言有点无意义,但无论如何引用原始测试代码.
if sys.version_info < (3, 0):
# Python2: csv module does not support unicode, we must use byte strings.
def _input_csv(csv_data):
for line in csv_data:
assert isinstance(line, bytes)
yield line
def _output_csv(csv_line):
for i, column in enumerate(csv_line):
csv_line[i] = column.decode("ascii", errors='ignore')
assert isinstance(csv_line[i], unicode) # NOQA
else:
# Python3: csv module does support unicode, we must use strings everywhere,
# not byte strings
def _input_csv(unicode_csv_data):
for line in unicode_csv_data:
assert isinstance(line, bytes)
line = line.decode("ascii", errors='ignore')
assert isinstance(line, str)
yield line
def _output_csv(csv_line):
for column in csv_line:
assert isinstance(column, str)
我在哪里读取(在这种情况下从子进程):
reader = csv.reader(_input_csv(process.stdout), delimiter="|")
for row in reader:
_output_csv(row)
内容总结
以上是互联网集市为您收集整理的python – 如何读取包含井号的CSV文件?全部内容,希望文章能够帮你解决python – 如何读取包含井号的CSV文件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。