Python将\r识别为行分隔符

Python将\r识别为行分隔符,python,line-endings,file-io,Python,Line Endings,File Io,我在Ubuntu设备上运行的Python脚本中使用了importfileinput 我在命令行上运行脚本时使用了python myscript.py firstinputfile.txt secondinputfile.txt,在myscript.py中,我使用for line in fileinput.input()对这些行进行迭代。我遇到的问题是firstinputfile.txt和secondinputfile.txt都使用Macintosh(\r)行结尾,而fileinput.input

我在Ubuntu设备上运行的Python脚本中使用了
importfileinput

我在命令行上运行脚本时使用了
python myscript.py firstinputfile.txt secondinputfile.txt,在
myscript.py
中,我使用
for line in fileinput.input()
对这些行进行迭代。我遇到的问题是
firstinputfile.txt
secondinputfile.txt
都使用Macintosh(
\r
)行结尾,而
fileinput.input()
似乎没有将
\r
识别为行分隔符

有没有办法强制
fileinput
\r
识别为行分隔符

我已经考虑过预处理
firstinputfile.txt
secondinputfile.txt
来使用
\n
行结束符,但是我犹豫了两个原因:I)我不想发出额外的文件来管理;ii)我仍然希望
fileinput
的输入来自文件参数(不是管道命令之后的
stdin
),因此我可以使用
fileinput.filename()
fileinput.filelineno()

有什么建议吗?

事实证明,它支持一个可选的
openhook
参数:

通过提供打开钩子,可以控制文件的打开方式 将openhook参数设置为fileinput.input()或fileinput()。钩子 必须是接受两个参数的函数:filename和mode,以及 返回相应打开的类似文件的对象 此模块已提供

此外,该文件建议可以打开一个文件,以支持Windows/Unix/Macintosh新行,并使用
rU
模式:

以“U”或“rU”模式打开文件将打开文件进行读取 在通用换行模式下。所有三行结束约定都将 在各种文件返回的字符串中转换为“\n” 方法,如read()和readline()

因此,您可以编写一个小函数作为
openhook
参数传递,该参数将以支持通用换行符的方式打开文件:

def univ_file_read(name, mode):
    # WARNING: ignores mode argument passed to this function
    return open(name, 'rU')
然后,而不是:

for line in fileinput.input():
使用:


这似乎对我起到了作用,
\r
现在被识别为行分隔符。

您能在文件中用“\r\n”替换
\r
吗reading@avasal我可以,但我不希望有副作用。理想情况下,我希望能够在接收文件的状态下将文件作为输入,并输出我需要的信息不要创建任何中间状态/更改输入源。如果文件不是太大,则可能可以将所有内容作为字符串读取,并使用“\r”创建列表,然后在it@avasal根据这个问题,这将使脚本更加复杂,因为我需要跟踪哪些列表项是关联的当我需要时,我会使用哪些输入文件来显示这些信息。这可能不会增加太多的复杂性,但如果有可用的解决方案,我当然更喜欢不需要它的解决方案。
for line in fileinput.input(openhook=univ_file_read):