我正在编写一个Python文件,需要读入几个不同类型的文件。在使用for line in f
后,我正在使用传统的f = open("file.txt", "r")
逐行阅读文件。
这似乎并不适用于所有文件。我的猜测是一些文件以不同的编码结束(例如\ r \ n与仅\ r \ n)。我可以读取整个文件并在\ r \ n上执行字符串拆分,但这是非常昂贵的,我宁愿不。有没有办法让Python的readline方法识别出两种行尾变化?
答案 0 :(得分:18)
使用通用换行支持 - 请参阅http://docs.python.org/library/functions.html#open
除了标准的fopen() 值模式可以是“U”或“rU”。蟒蛇 通常用通用的方式构建 换行支持;提供'U'打开 该文件作为文本文件,但行可以 被以下任何一项终止: Unix的行尾约定'\ n', Macintosh约定'\ r',或 Windows约定'\ r \ n'。所有的 这些外部表征是 被Python程序看作'\ n'。如果 Python没有通用的构建 换行符支持“U”模式 与普通文本模式相同。注意 这样打开的文件对象也有 名为newlines的属性有一个 值为None(如果还没有换行符 被看见了,'\ n','\ r','\ r \ n'或者a 包含所有换行符类型的元组 可见
答案 1 :(得分:0)
您可以尝试使用生成器方法自行读取行并忽略任何EOL字符:
def readlines(f):
line = []
while True:
s = f.read(1)
if len(s) == 0:
if len(line) > 0:
yield line
return
if s in ('\r','\n'):
if len(line) > 0:
yield line
line = []
else:
line.append(s)
for line in readlines(yourfile):
# ...