【问题标题】:Writing to CSV with Python adds blank lines [duplicate]使用 Python 写入 CSV 会添加空行 [重复]
【发布时间】:2013-01-19 13:26:42
【问题描述】:

我正在尝试写入 CSV 文件,但中间有空白行。如何删除空白行?

import csv
b = open('test.csv', 'w')
a = csv.writer(b)
data = [['Me', 'You'],\
        ['293', '219'],\
        ['54', '13']]
a.writerows(data)
b.close()

【问题讨论】:

  • 在定义data 的行的末尾不需要反斜杠。 Python 忽略封闭方括号内的换行符,即在 [] 之间
  • 如果我错了,请纠正我,但那个反斜杠是延续字符,不是吗?
  • 这是旧的,但我注意到没有人回应。如果您有逗号,则不需要连续字符。

标签: python csv python-3.3


【解决方案1】:

您使用csv 模块的方式在Python 3 中在几个方面发生了变化(docs),至少在您需要打开文件的方式方面。无论如何,像

import csv
with open('test.csv', 'w', newline='') as fp:
    a = csv.writer(fp, delimiter=',')
    data = [['Me', 'You'],
            ['293', '219'],
            ['54', '13']]
    a.writerows(data)

应该可以。

【讨论】:

  • ERROR: TypeError: 'newline' is an invalid keyword argument for this function ?
  • @SaadBinShahid:那么你没有使用 Python 3。
【解决方案2】:

如果您在 Windows 上使用 Python 2.x,则需要将您的行 open('test.csv', 'w') 更改为 open('test.csv', 'wb')。也就是说,您应该以binary file 的形式打开文件。

但是,正如其他人所说,文件接口在 Python 3.x 中发生了变化。

【讨论】:

  • 这是Windows在写文本而不是二进制时自动添加nl-characters造成的吗?
  • 我试过我得到这个错误:w.writrows(data) 'str' 不支持缓冲区接口
  • 我用的是python33....不知道有没有区别!
  • @user2031063 python 版本无关紧要。您的错误消息表明您只是混淆了 wa 对象。你确定你的名字都对吗?
  • @Wilduck:OP 使用的 Python 版本确实很重要,因为 2/3 str/bytes 发生了变化。
【解决方案3】:
import csv

hello = [['Me','You'],['293', '219'],['13','15']]
length = len(hello[0])

with open('test1.csv', 'wb') as testfile:
    csv_writer = csv.writer(testfile)
    for y in range(length):
        csv_writer.writerow([x[y] for x in hello])

会产生这样的输出

Me You
293 219
13 15

希望对你有帮助

【讨论】:

  • 谢谢,但是 'wb' 给了我一个错误。
  • 这与您遇到的错误相同吗? stackoverflow.com/questions/5471158/…
  • 解决方案有帮助吗?
  • 不,它没有...我收到此错误
  • 直接复制我的内容,这对我有用
【解决方案4】:

您需要以二进制 b 模式打开文件以处理 Python 2 中的空白行。这在 Python 3 中不是必需的。

所以,将open('test.csv', 'w') 更改为open('test.csv', 'wb')

【讨论】:

  • 我试过了,我得到了这个错误:w.writrows(data) 'str' 不支持缓冲区接口。我正在使用python33..不知道这是否有任何区别!
【解决方案5】:

Pyexcel 在 Python2 和 Python3 上都能很好地工作,没有任何问题。

使用 pip 快速安装:

pip install pyexcel

之后,只需要 3 行代码就完成了:

import pyexcel
data = [['Me', 'You'], ['293', '219'], ['54', '13']]
pyexcel.save_as(array = data, dest_file_name = 'csv_file_name.csv')

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 2014-01-14
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2015-11-16
    • 2015-08-05
    相关资源
    最近更新 更多