如何检测文件中的DOS换行符?

chi*_*gsy 13 python bash file line-endings line-breaks

我有一堆文件.有些是Unix行结尾,很多都是DOS.在切换行结尾之前,我想测试每个文件以查看是否格式化dos.

我该怎么做?有没有我可以测试的旗帜?相似的东西?

Eri*_*got 29

由于"通用换行模式"(),Python可以自动检测文件中使用的换行约定U,并且可以通过newlines文件对象的属性访问Python的猜测:

f = open('myfile.txt', 'U')
f.readline()  # Reads a line
# The following now contains the newline ending of the first line:
# It can be "\r\n" (Windows), "\n" (Unix), "\r" (Mac OS pre-OS X).
# If no newline is found, it contains None.
print repr(f.newlines)
Run Code Online (Sandbox Code Playgroud)

这给出了第一行的换行符(Unix,DOS等),如果有的话.

正如John M.所指出的那样,如果你有一个使用多个换行符编码的病态文件,f.newlines那么在阅读了很多行后,到目前为止找到的所有换行编码都是一个元组.

参考:http://docs.python.org/2/library/functions.html#open

如果您只想转换文件,只需执行以下操作:

with open('myfile.txt', 'U') as infile:
    text = infile.read()  # Automatic ("Universal read") conversion of newlines to "\n"
with open('myfile.txt', 'w') as outfile:
    outfile.write(text)  # Writes newlines for the platform running the program
Run Code Online (Sandbox Code Playgroud)

  • @John:来吧:-1答案提到有用的"换行符",但只有拼写错误?或者从具有不同换行约定的文件连接的病理文件?原始海报提到"来自Unix或DOS的文件",而不是这些奇怪的文件! (4认同)
  • -1它被称为`newlines`(复数),它不是编码.你所展示的是如何找到(如果有的话)终止第一行(如果有的话).您的评论不正确:它不包括第一行和唯一行未终止的情况(因此`newlines`指的是'None`).此外,它假定所有行以相同的方式终止.不同行结尾的文件的连接不是未知的.在OP的标准化一行结尾的应用程序中,他将需要读取所有输入文件(以及所有文档,特别是它提到`tuple`的地方). (2认同)

nc3*_*c3b 9

你可以搜索字符串\r\n.这是DOS风格的结尾.

编辑:看看这个