【问题标题】:iterating through files with carriage returns使用回车遍历文件
【发布时间】:2011-03-02 22:19:49
【问题描述】:

有没有办法使用语法遍历文本文件,

with open(filename,'r') as f:
  for line in f:
    print f

如果文件只包含回车而没有换行符?

目前我能做的只有

with open(filename,'r') as f:
  for line in f.read().split('\r'):
    print f

但文件有时很大。我不想使用 dos2unix 修改文件,因为另一个软件程序需要它的原始格式。

【问题讨论】:

  • 你试过了吗?我认为 Python 自己处理各种换行符(在文本模式下读取文件时)。
  • @delnan:是的——它实际上在第一次迭代中读入了整个文件。
  • 输入中的行可以以 '\n'、'\r' 或 '\r\n' 结尾,这些行在返回给调用者之前会被翻译成 '\n'。参考pythonconquerstheuniverse.wordpress.com/2011/05/08/…

标签: python


【解决方案1】:

你可以使用 Python 的universal newline support for open()

除了标准的 fopen() 值模式之外,模式还可以是 'U''rU'。 Python 通常是用通用换行支持构建的;提供'U' 将文件作为文本文件打开,但行可能被以下任何一种终止:Unix 行尾约定'\n'、Macintosh 约定'\r' 或Windows 约定'\r\n'。所有这些外部表示都被 Python 程序视为'\n'。如果 Python 是在没有通用换行支持的情况下构建的,'U' 的模式与普通文本模式相同。请注意,如此打开的文件对象还有一个名为 newlines 的属性,其值为 None(如果尚未看到换行符)、'\n''\r''\r\n',或包含所有换行符类型的元组见过。

【讨论】:

  • 啊,这个是我想的。 +1
  • 太棒了——我只需要open(filename,'rU')
  • 如果文件以请求正文的形式出现怎么办?
  • 弃用警告:'U' 模式已弃用
【解决方案2】:

您可以使用open(filename, 'rU')

【讨论】:

  • 无需使用相同的解决方案再次添加答案恕我直言
猜你喜欢
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2014-04-10
  • 2018-12-13
  • 2021-05-05
相关资源
最近更新 更多