在read()之前或之后删除空白行

时间:2018-08-08 19:11:27

标签: python python-2.7

在以下代码中,有没有一种方法可以在将文件中的空白行发送到parse()之前将其删除:

import robotexclusionrulesparser as rerp
p = rerp.RobotExclusionRulesParser()

with open('robots.txt') as f:
    s = f.read()

p.parse(s)

print(p)

我尝试了这个但没有成功:

import re
import robotexclusionrulesparser as rerp
p = rerp.RobotExclusionRulesParser()

list = []
with open('robots.txt') as f:
    s = f.read() 
    if not re.match(r'^\s*$', s):
        list.append(s)
p.parse(list)

print(p)

哪个返回:

Traceback (most recent call last):
  File "test.py", line 10, in <module>
    p.parse(list)
  File "/usr/local/lib/python2.7/dist-packages/robotexclusionrulesparser.py", line 530, in parse
    s = s.decode("iso-8859-1")
AttributeError: 'list' object has no attribute 'decode'

出于调试目的,robots.txt的内容示例:

User-agent: *

Disallow: /

3 个答案:

答案 0 :(得分:0)

正则表达式是您想要的,但是使用match代替sub

s = f.read()
s = re.sub(r'\n+', '\\n', s)

Example on Regex101

答案 1 :(得分:0)

检查一下:

import re
lst = []
with open('robots.txt') as f:
    for line in f:
        if not re.match(r'^\s*$', line):
            lst.append(line.strip())
print(lst)

您的实际问题显然是方法解析需要一个str而不是一个列表。

还请检查以下内容: list 是保留术语,不应用作变量名。

答案 2 :(得分:0)

parser()需要一个字符串,其中包含以“ \ n”结尾的行列表。

这是工作代码:

import re
import robotexclusionrulesparser as rerp
p = rerp.RobotExclusionRulesParser()
lst = []

with open('robots.txt') as f:
    for line in f:
        if not re.match(r'^\s*$', line):
            lst.append(line.strip())

s = '\n'.join(lst)
p.parse(s)
print(p)