如何在文件中检测DOS换行符?
我有一堆文件。有些文件是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风格的换行符。
编辑:可以看看 这个链接。