Python将\r识别为行分隔符
我在Ubuntu设备上运行的Python脚本中使用了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
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):