python中Unicodesv读取器的问题
我在使用Unicodesv阅读器时遇到问题。我一直在寻找如何使用该模块的不同示例,但每个人都不断引用Unicodesv网站上的确切示例(或类似变体) 对我来说,这个例子对我们的理解做了太多假设。它看起来不像是正在传递csv文件。我完全错过了剧情 我想做的是:python中Unicodesv读取器的问题,python,csv,unicode,Python,Csv,Unicode,我在使用Unicodesv阅读器时遇到问题。我一直在寻找如何使用该模块的不同示例,但每个人都不断引用Unicodesv网站上的确切示例(或类似变体) 对我来说,这个例子对我们的理解做了太多假设。它看起来不像是正在传递csv文件。我完全错过了剧情 我想做的是: 读取csv文件的第一行,即标题 读剩下的几行并把它们放在字典里 我的坏代码: import unicodecsv # i = 0 myCSV = "$_input.csv" dic = {} # f = open(myCSV, "rb")
import unicodecsv
#
i = 0
myCSV = "$_input.csv"
dic = {}
#
f = open(myCSV, "rb")
reader = unicodecsv.reader(f, delimiter=',')
strHeader = reader.next()
#
# read the first line of csv
# use custom function to parse the header
myHeader = FNC.PARSE_HEADER(strHeader)
#
# read the remaining lines
# put data into dictionary of class objects
for row in reader:
i += 1
dic[i] = cDATA(myHeader, row)
正如所料,我得到了“UnicodeDecodeError”。也许上面的例子有答案,但它们完全超出了我的理解
有人能帮我修一下密码吗?我的头发都快没了
我将读卡器线路切换到:
reader = unicodecsv.reader(f, encoding='utf-8')
回溯:
对于读取器中的行:
文件“C:\Python27\unicodesv\py2.py”,下一行的第128行
对于第行中的值]
UnicodeDecodeError:“utf8”编解码器无法解码位置48:无效开始字节中的字节0x90
当我严格使用以下方式打印数据时:
f = open(myCSV, "rb")
reader = csv.reader(f, delimiter=',')
for row in reader:
print(str[row[9]] + '\n')
print(repr(row[9] + '\n')
>>> UTAS ? Offline
>>> 'UTAS ? Offline'
创建读卡器时需要声明输入文件的编码,就像创建写卡器时一样:
>>> import unicodecsv as csv
>>> with open('example.csv', 'wb') as f:
... writer = csv.writer(f, encoding='utf-8')
... writer.writerow(('heading0', 'heading1'))
... writer.writerow((u'é', u'ñ'))
... writer.writerow((u'ŋ', u'ŧ'))
...
>>> with open('example.csv', 'rb') as f:
... reader = csv.reader(f, encoding='utf-8')
... headers = next(reader)
... print headers
... data = {i: v for (i, v) in enumerate(reader)}
... print data
...
[u'heading0', u'heading1']
{0: [u'\xe9', u'\xf1'], 1: [u'\u014b', u'\u0167']}
打印字典会显示数据的转义表示,但您可以通过单独打印字符来查看字符:
>>> for v in data.values():
... for s in v:
... print s
...
é
ñ
ŋ
ŧ
编辑:
如果文件的编码未知,则最好在处理之前使用类似的方法来确定编码。创建读卡器时需要声明输入文件的编码,就像创建写入器时一样:
>>> import unicodecsv as csv
>>> with open('example.csv', 'wb') as f:
... writer = csv.writer(f, encoding='utf-8')
... writer.writerow(('heading0', 'heading1'))
... writer.writerow((u'é', u'ñ'))
... writer.writerow((u'ŋ', u'ŧ'))
...
>>> with open('example.csv', 'rb') as f:
... reader = csv.reader(f, encoding='utf-8')
... headers = next(reader)
... print headers
... data = {i: v for (i, v) in enumerate(reader)}
... print data
...
[u'heading0', u'heading1']
{0: [u'\xe9', u'\xf1'], 1: [u'\u014b', u'\u0167']}
打印字典会显示数据的转义表示,但您可以通过单独打印字符来查看字符:
>>> for v in data.values():
... for s in v:
... print s
...
é
ñ
ŋ
ŧ
编辑:
如果文件的编码未知,那么最好在处理之前使用类似的方法来确定编码。如果您的最终目标是读取csv文件并将数据转换为DICT,那么我建议使用csv.DictReader。DictRead将负责读取标题并将其余行转换为Dict(rowdicts)。这使用CSV模型,其中包含大量可用的文档/示例
>>> import csv
>>> with open('names.csv') as csvfile:
... reader = csv.DictReader(csvfile)
... for row in reader:
... print(row['first_name'], row['last_name'])
为了更加清晰,请在此处查看示例如果您的最终目标是读取csv文件并将数据转换为DICT,那么我建议使用csv.DictReader。DictRead将负责读取标题并将其余行转换为Dict(rowdicts)。这使用CSV模型,其中包含大量可用的文档/示例
>>> import csv
>>> with open('names.csv') as csvfile:
... reader = csv.DictReader(csvfile)
... for row in reader:
... print(row['first_name'], row['last_name'])
为了更清楚,请查看此处的示例csv文件包含Unicode?utf-8字符,因此我需要使用Unicode Decsv模块,而不是常规的csv模块。当我从csv文件中删除Unicode字段时,代码运行良好。我忘记了Unicode以及如何处理它。然后让我们把这个utf-8转换成ascii格式。如果您使用的是Python3,。那你就走运了。UTF8现在是python3的标准格式。另外,我们有很多工具和方法来转换文件编码格式。甚至记事本++也能帮你。试试看。祝你好运。还要检查这个csv文件包含Unicode?utf-8字符,所以我需要使用Unicode?utf-8模块,而不是常规的csv模块。当我从csv文件中删除Unicode字段时,代码运行良好。我忘记了Unicode以及如何处理它。然后让我们把这个utf-8转换成ascii格式。如果您使用的是Python3,。那你就走运了。UTF8现在是python3的标准格式。另外,我们有很多工具和方法来转换文件编码格式。甚至记事本++也能帮你。试试看。祝你好运。也试着检查一下1)你先显示“作者”,然后显示“读者”。需要作者吗?或者,这只是在有人创建csv文件的情况下?在我的情况下,有人向我发送了一个csv文件,我正在处理该信息。我的代码运行良好,直到有一天其中一个字段添加了Unicode字符。2) 我尝试在“reader”行添加“endcoding='utf-8'”,但它抛出了一个错误-与该参数的未识别输入字符串的行一致-我是从内存编写的,我不在工作站上。(1)writer部分仅用于示例目的。读卡器代码与文件的创建方式无关(尽管它假定一个编码为utf-8的有效csv文件)。(2)请使用新代码编辑您的问题,并在您有机会时进行完整的回溯。“unicode”示例在您的文件中也可能会有帮助。可能您的数据没有编码为utf-8。基于此,请尝试将编码更改为“latin-1”。您可以尝试使用各种语言的ISO-8859-X编码。是的,我也这么认为。一些数据是国际性的。到目前为止还没有问题。我担心如果我选择了特定的编码,会出现问题这次会有用,但下次数据/源更改时可能不会。我想与其他人共享此代码,但我不希望它有问题。有没有办法用许多不同的编码来证明它?可能是一堆TRY语句?在这种情况下,我认为您需要适当的工具。我在回答中提出了一个建议。我认为这就足够了我们可以回答这个问题。祝你好运!1)你展示的是“作者”,然后是“读者”。需要作者吗?或者,这只是在有人创建csv文件的情况下?在我的情况下,有人向我发送了一个csv文件,我正在处理该信息。我的代码运行良好,直到有一天其中一个字段添加了Unicode字符。2) 我尝试在“reader”行添加“endcoding='utf-8'”,但它抛出了一个错误-与该参数的未识别输入字符串的行一致-我是从内存编写的,我不在工作站上。(1)writer部分仅用于示例目的。读卡器代码与文件的创建方式无关(尽管它假定一个编码为utf-8的有效csv文件。(2)请编辑您的文件