4

私はちょうどPCを仕事に残し(Python 2.7を使用)、ちょうど完成したばかりのスクリプトを持っていました(以下に再現)。それは仕事でうまくいきました、私はただ1つか2つのものを追加したかったです。しかし、家に帰ってMacバージョンのPython(3.2.2)を使用していると、次のエラーが発生します。

Traceback (most recent call last):
  File "/Users/Downloads/sda/alias.py", line 25, in <module>
    for row_2 in in_csv:
  File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 304: ordinal not in range(128)

私のコードはここにあります:

import csv
inname = "Fund_Aliases.csv"
outname = "output.csv"

def first_word(value):
    return value.split(" ", 1)[0]

with open(inname, "r") as infile:
    with open(outname, "w") as out file:
      in_csv = csv.reader(infile)
      out_csv = csv.writer(outfile)

     column_names = next(in_csv)
     out_csv.writerow(column_names)

      id_index = column_names.index("id")
      name_index = column_names.index("name")

      try:
          row_1 = next(in_csv)
          written_row = False

          for row_2 in in_csv:
            if first_word(row_1[name_index]) == first_word(row_2[name_index]) and row_1[id_index] != row_2[id_index]:
                if not written_row:
                    out_csv.writerow(row_1)

                out_csv.writerow(row_2)
                written_row = True
            else:
                written_row = False

            row_1 = row_2
      except StopIteration:
        # No data rows!
        pass
4

1 に答える 1

5

Fund_Aliases.csvASCIIファイルではないようです。

Python3のドキュメントによると:

open()は読み取り用にCSVファイルを開くために使用されるため、ファイルはデフォルトでシステムのデフォルトエンコーディングを使用してUnicodeにデコードされます(locale.getpreferredencoding()を参照)。別のエンコーディングを使用してファイルをデコードするには、openのencoding引数を使用します。

with open('some.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)

したがって、encodingパラメーターを指定してみてください。

于 2012-08-10T22:22:58.590 に答える