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中应该传递一个以二进制模式打开的文件。
IE:

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

如果没有看到导致问题的输入文件,我不能确定这会解决问题,但它可能会导致其他错误。

于 2013-03-15T04:25:31.883 回答
0

我可以看到两个潜在的问题。首先,您应该以二进制模式打开文件:

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

其次,您可能正在为两个不同的操作系统处理两个不同的行尾。您可以通过在模式之后添加来避免这种情况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 回答