3

Wing IDE を使用して、Mac でいくつかのコードを開発しました。私が開発した csv モジュールを使用するコードは機能しており、私の Mac で実行したいことを実行しています。ただし、問題は、私が書いた人が Windows で使用する必要があることです。エスケープ文字を使用していないため、コードは気にしませんでした。

コードは次のようになります。

csvfile = open('file.csv', 'r')
csvreader = csv.reader(csvfile, delimiter = ',')
for row in csvreader:
   thisVariable = row[0]  # <<<--------

上記の「矢印」は、Windows マシンでエラーが返される場所です。私が言ったように、コードは Mac 上で問題なく動作し、実際、これは私が書いたコードのかなり下の方にあります。このステートメントの上に読み書きされる他の CSV ファイルがあり、同様のインデックスを使用します。

この問題に関して誰かが持っているアイデアを本当に感謝します! ありがとう!

4

3 に答える 3

5

Python 2 では

ファイルをバイナリ ファイルとして開く必要があります。

csvfile = open('file.csv', 'rb')
csvreader = csv.reader(csvfile, delimiter = ',')
for row in csvreader:
    thisVariable = row[0]

http://docs.python.org/2/library/csv.html#csv.reader


Python 3 では

open ステートメントで newline='' を設定する必要があります。

csvfile = open('file.csv', 'r', newline='')
csvreader = csv.reader(csvfile, delimiter = ',')
for row in csvreader:
    thisVariable = row[0]

http://docs.python.org/3.3/library/csv.html#csv.reader

于 2013-03-15T04:46:13.337 に答える
0

ドキュメント から、csv.readerバイナリ モードで開かれたファイルを渡す必要があります。
すなわち:

csvfile = open('file.csv', 'rb')

問題の原因となっている入力ファイルを確認しないと、これで問題が解決するかどうかわかりませんが、他のバグが発生する可能性があります。

于 2013-03-15T04:25:31.883 に答える
0

潜在的な問題が 2 つあります。まず、バイナリ モードでファイルを開く必要があります。

csvfile = open('file.csv', 'rb')

第 2 に、2 つの異なる OS に対して 2 つの異なる行末を扱う場合があります。Uこれは、モードの後に​​追加することで回避できます。

csvfile = open('file.csv', 'rbU')

行をテストして、ユーザーを不正なデータから保護することもお勧めします。これにより、最終結果は次のようになります。

csvfile = open('file.csv', 'rbU')
csvreader = csv.reader(csvfile, delimiter = ',')
for row in csvreader:
   if not row:
      continue
   thisVariable = row[0]
于 2013-03-15T04:44:49.887 に答える