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

14 投票
7 回答
23718 浏览
提问于 2025-04-15 22:31

我有一堆文件。有些文件是Unix格式的换行符,很多是DOS格式的。我想先检查每个文件是否是DOS格式,然后再去转换换行符。

我该怎么做呢?有没有什么标志可以用来测试?类似的东西?

7 个回答

3

(仅限Python 2:) 如果你只是想读取文本文件,无论是DOS格式还是Unix格式,这个方法都可以用:

print open('myfile.txt', 'U').read()

也就是说,Python的“通用”文件读取器会自动识别各种不同的换行符,并把它们转换成"\n"。

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

(感谢handle!)

35

Python可以自动识别文件中使用的换行符格式,这得益于它的“通用换行模式”。你可以通过文件对象的newlines属性来查看Python的判断结果:

f = open('myfile.txt', newline=None)
# Python 2: 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)

这会告诉你第一行的换行符是什么(比如Unix、DOS等),如果有的话。

正如John M.提到的,如果你碰巧有一个文件使用了多种换行符格式,f.newlines会是一个元组,里面包含了在读取多行后发现的所有换行符格式。

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

如果你只是想转换一个文件,可以简单地这样做:

with open('myfile.txt', newline=None) 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
9

你可以在字符串中查找 \r\n。这是一种DOS风格的换行符。

编辑:可以看看 这个链接

撰写回答