【问题标题】:Efficiently reading a csv file with windows newline on linux in Python用Python在Linux上有效地读取带有Windows换行符的csv文件
【发布时间】:2011-01-19 20:19:23
【问题描述】:

以下是在windows下逐行读取csv文件的。

f = open(filename, 'r')

for line in f:

虽然将 csv 文件复制到 linux 服务器时,它会失败。

应该提到性能是一个问题,因为 csv 文件很大。因此,我担心在使用诸如 strip 之类的东西时会复制字符串。

【问题讨论】:

  • f = open(filename, 'rt') 工作得更好吗?
  • 我对代码失败感到好奇,如果您正在执行split(),它应该与任一行结尾相同。我可以认为会导致问题的唯一事情是 line[:-1] 之类的东西,但是您要避免复制字符串,这样就不可能了!除非您在没有通用换行支持的情况下编译了 python...

标签: python csv python-3.x


【解决方案1】:

dos2unix 实用程序将非常有效地执行此操作。如果文件那么大,我会将该命令作为副本的一部分运行。

【讨论】:

  • 这是一个很好的提示,虽然它不能作为复制操作的一部分,我需要它是 python 代码。
【解决方案2】:

Python 内置了对 Windows、Linux 和 Mac 行尾的支持:

f = open(filename, 'rtU')

for line in f:
    ...

如果您真的不希望缓慢的字符串操作,您应该在处理文件之前剥离文件。您可以使用 dos2unix(可以在 Debian 软件包“tofrodos”中找到)或(更容易)使用应该自动执行此操作的 FTP 文本模式。

【讨论】:

    【解决方案3】:

    如果性能很重要,为什么不使用csv.reader

    【讨论】:

    • 比我快 0.001 皮秒:-)
    • @John Machin,您是否正在寻找升级计算机的借口? :)
    【解决方案4】:

    Ummm .... 你有 csv 文件,你正在使用 Python,为什么不使用 Python csv 模块读取文件?

    【讨论】:

      【解决方案5】:

      实际上,读取任何文件的最高效方式是在一个大 I/O 中。并不总是有足够的 RAM 来执行此操作,但 I/O 越少越好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-05
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-11-17
        • 2015-12-11
        • 2019-11-12
        相关资源
        最近更新 更多