首页 > 解决方案 > 匹配文件中的空行

问题描述

1. 匹配文件中的空行最可靠的方法是什么?

2.匹配文件中的空行最有效的方法是什么?

3、以下几种不同的空行匹配方式有什么区别?

语境:

我试图了解在 Python 中检测文件中的空白行的过程中可能存在的一些问题。

我可以想出五种方法来定义:

  1. BLANKS:使用正则表达式匹配空行^$
  2. NEWLINES:使用正则表达式匹配换行符^\r?\n
  3. EMPTIES:匹配空字符串,''
  4. PNEWLINES:匹配换行符,'\n'
  5. STRIPS:将行剥离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)

尽管我得到了统一的结果,但它们似乎并不相同。我的输入是来自 Project Gutenberg 的 Leo Tolstoy的 War and Peace 的 utf-8 文本副本,我相信 Windows 行结尾。我不确定还有什么要测试的。

我观察到以下几点:

我关心的是匹配空行的最稳健的方法。我总是'^$'和 sed 一起使用,但是在 Python 中,老实说,我什至一开始都不理解这些行是如何分割的!尽管 Python 在换行符上拆分,新行仍然保留,这对我来说似乎很奇怪,也违反直觉。

除了表面上的区别之外,所有这些之间的真正区别是什么。例如,为什么'^$''^\r?\n'等价?哪个是最好的方法?还有哪些其他方法?

标签: pythonregexnewlineblank-line

解决方案


这就像理论问题,但简单的方法是遵循这个逻辑。

with open(file,'r') as out:
    lines = out.readlines()

for line in lines:
    if len(line.strip()) == 0:
        print('Empty')

推荐阅读