【问题标题】:python readline by '\r\n'python readline by '\r\n'
【发布时间】:2013-09-19 15:16:10
【问题描述】:

我如何调用 f.readline() ,其中行分隔符为 \r\n

这个 CSV 文件非常大,所以我不能f.read().split('\r\n')

相反,我希望f.readline('\r\n')

这是一个典型的行:

1, "ABC", "the quick \n brown fox \n jumps over the \n lazy dogs", 5 \r\n

【问题讨论】:

  • 为什么要手动指定分隔符? readline 应该默认自动使用它。
  • 我希望 readline 忽略 \n 并仅使用 \r\n
  • 这个文件是8GB,我不能split。也许我读了几行 split 并保留其余部分
  • 使用io.open打开文件并指定newline参数。

标签: python io


【解决方案1】:

看来您实际上是在尝试读取 CSV 文件(或类似文件),其中嵌入在引号中的换行符需要被忽略。

csv module 已经为您处理好了。

import csv
with open("myfile", "rb") as infile:
    reader = csv.reader(infile, delimiter=",", skipinitialspaces=True)
    for line in reader:
       print line

【讨论】:

    【解决方案2】:

    如果你不使用csv,那么open带有universal newlines support的文件:

    f = open('big_csv_file.csv', 'rU')
    

    这将导致f.readline()\n\r\n\r 同等解释为换行符。

    【讨论】:

      【解决方案3】:

      来自 csv python documentation

      >>> import csv
      >>> with open('eggs.csv', 'rb') as csvfile:
      ...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') #<--- Note the
                                                                             #delimiter param.
      ...     for row in spamreader:
      ...         print ', '.join(row)
      Spam, Spam, Spam, Spam, Spam, Baked Beans
      Spam, Lovely Spam, Wonderful Spam
      

      只需制作一个分隔符设置为 '\r\n' 的 csvreader。那应该给你每行分隔 由 \r\n.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-27
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        相关资源
        最近更新 更多