【问题标题】:CSV Reader different outputs on Ubuntu and Windows - Python [duplicate]CSV阅读器在Ubuntu和Windows上的不同输出-Python [重复]
【发布时间】:2016-07-29 10:15:17
【问题描述】:

我有一个名为 Some.csv 的文件,其中有一个字段(列),其值类似于

1000, 2000, .... 39000.

我只想要 39000 的文件,所以我编写了以下 python 脚本

import os
import csv

with open('Somenew.csv', 'w') as fw:
  writr = csv.writer(fw, delimiter=',')
  with open('Some.csv','r') as fr:
    reader = csv.reader(fr, delimiter = ',')
    for row in reader:
      if row[2] == '39000':  writr.writerow(row)

现在当它在 Windows 上执行时,它 Somenew.csv 看起来像这样

xxxx, xxxx, 39000, xxxx, xxxx

yyyy, yyyy, 39000, yyyy, yyyy

但在 Linux (Ubuntu 14.04LTS) 上执行时,没有添加额外的换行符。

这有什么原因吗?是不是编译器的原因?

【问题讨论】:

  • 这是因为 Windows 在文本文件中使用 \r\n 而不是 \n 作为行尾。简单的解决方法是将 CSV 文件作为二进制文件读取和写入,但 Python 3 中还有其他选项。您使用的是什么版本的 Python?
  • 2.7.something(可能是 10 个)。谢谢,这是有道理的。所以把'r'和'w'改成'rb'和'wb'?

标签: python linux windows python-2.7 csv


【解决方案1】:

如果您使用 Python 2.x,则必须对 csv 文件使用 wb 模式:

https://docs.python.org/2/library/csv.html#csv.writer

如果 csvfile 是文件对象,则必须在不同的平台上使用“b”标志打开它。

【讨论】:

    【解决方案2】:

    尝试以二进制模式打开文件。 This 回答可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多