And*_*ers 12 python csv byte-order-mark character-encoding python-2.7
我试图用Python读取一个CSV文件,代码如下:
with open("example.txt") as f:
c = csv.reader(f)
for row in c:
print row
Run Code Online (Sandbox Code Playgroud)
我example.txt只有以下内容:
Hello world!
对于UTF-8或ANSI编码文件,这给了我预期的输出:
> ["Hello world!"]
Run Code Online (Sandbox Code Playgroud)
但是,如果我将文件保存为带有BOM的UTF-8,我会得到以下输出:
> ["\xef\xbb\xbfHello world!"]
Run Code Online (Sandbox Code Playgroud)
由于我无法控制用户将用作输入的文件,因此我希望这也适用于BOM.我该如何解决这个问题?有什么我需要做的,以确保这也适用于其他编码?
您可以使用unicodecsvPython模块,如下所示:
import unicodecsv
with open('input.csv', 'rb') as f_input:
csv_reader = unicodecsv.reader(f_input, encoding='utf-8-sig')
print list(csv_reader)
Run Code Online (Sandbox Code Playgroud)
因此,对于包含带有BOM的UTF-8中的以下内容的输入文件:
c1,c2,c3,c4,c5,c6,c7,c8
1,2,3,4,5,6,7,8
Run Code Online (Sandbox Code Playgroud)
它会显示以下内容:
[[u'c1', u'c2', u'c3', u'c4', u'c5', u'c6', u'c7', u'c8'], [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8']]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7634 次 |
| 最近记录: |