python中Unicodesv读取器的问题

python中Unicodesv读取器的问题,python,csv,unicode,Python,Csv,Unicode,我在使用Unicodesv阅读器时遇到问题。我一直在寻找如何使用该模块的不同示例,但每个人都不断引用Unicodesv网站上的确切示例(或类似变体) 对我来说,这个例子对我们的理解做了太多假设。它看起来不像是正在传递csv文件。我完全错过了剧情 我想做的是: 读取csv文件的第一行,即标题 读剩下的几行并把它们放在字典里 我的坏代码: import unicodecsv # i = 0 myCSV = "$_input.csv" dic = {} # f = open(myCSV, "rb")

我在使用Unicodesv阅读器时遇到问题。我一直在寻找如何使用该模块的不同示例,但每个人都不断引用Unicodesv网站上的确切示例(或类似变体)

对我来说,这个例子对我们的理解做了太多假设。它看起来不像是正在传递csv文件。我完全错过了剧情

我想做的是:

  • 读取csv文件的第一行,即标题
  • 读剩下的几行并把它们放在字典里
  • 我的坏代码:

    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)请编辑您的文件