我正在尝试在Python中检测文件中的空行的过程中了解一些可能的陷阱。
我可以想到五种定义方式:
^$
^\r?\n
''
'\n'
strip()
删除行,然后匹配一个空字符串。[nav] In [3]: i = 0
...: fin = open('warandpeace.txt', 'rt')
...: blanks = []
...: empties = []
...: newlines = []
...: pnewlines = []
...: strips = []
...: NEWLINE = re.compile(r'^\r?\n')
...: BLANK = re.compile(r'^$')
...: for line in fin:
...: if re.search(BLANK, line):
...: blanks.append((i, line))
...: if re.search(NEWLINE, line):
...: newlines.append((i, line))
...: if line == '':
...: empties.append((i, line))
...: if line == '\n':
...: pnewlines.append((i, line))
...: if line.strip == '':
...: strips.append((i, line))
...: i += 1
[nav] In [4]: print((len(blanks), len(empties), len(newlines), len(pnewlines), len(strips)))
(13892, 0, 13892, 13892, 0)
尽管我得到了统一的结果,但它们似乎不是等效的。我的输入是War and Peace by Leo Tolstoy from Project Gutenberg的utf-8文本副本,我相信它是Windows行尾。我不确定还有什么可以测试的。
我观察到以下情况:
\n
,因此它不是空字符串。 我关心的是匹配空白行的最可靠的方法。我一直将'^$'
与sed一起使用,但是老实说,在Python中,我什至不了解行是如何分割的!尽管Python在换行符上进行了拆分,但仍保留了新行,这似乎很奇怪,而且对我来说是违反直觉的。
除了表面上的区别,所有这些之间的真正区别是什么?例如,为什么'^$'
和'^\r?\n'
等价?最好的方法是什么?还有什么其他方法?
答案 0 :(得分:1)
这就像理论问题,但遵循这种逻辑的简单方法。
with open(file,'r') as out:
lines = out.readlines()
for line in lines:
if len(line.strip()) == 0:
print('Empty')