最后一个空格保留在数据 post 中循环并替换

Last whitespace remains in data post looping through and replacing

我 运行 陷入了一个令人难以置信的问题,我正在尝试删除数据 keyword.txt[=29 的所有白色space =] 并只保留字母串。但是在遍历并将每个 whitespace 替换为一个空字段之后,在输出中仍然可以看到一个新行,因此弄乱了另一个输出。

我不知道该怎么做。

脚本:

#!/usr/bin/python

kf = open ('keyword.txt', 'r')
sl = open ('syslog.txt', 'r')

keywordList = []

for keyword in kf:
    keyword = keyword.replace('\n', "")
    keywordList.append(keyword)
    print keyword

for string in sl:
    for keyword in keywordList:
        if keyword in string:
            print "**"+keyword+"**"

这产生的输出示例:

**anacron**
****
**anacron**
****
**CRON**
****

您可以看到 **** 出现在行中,因为它将空的 space 识别为关键字。就是这个问题...

keyword.txt

NetworkManager
avahi-daemon
dnsmasq
dbus
kernel
dhclient
CRON
bluetoothd
failsafe
modem-manager
udev-configure-printer
modem-manager
polkitd
anacron
acpid
rt-kit daemon
goa
AptDaemon
AptDaemon.PackageKit
AptDaemon.Worker
python

似乎空格并没有作为每个单词的一部分被抓取,而是作为一个单独的单词被抓取。

尝试像这样读入文件

kf = [x.strip() for x in open('keyword.txt', 'r') if not x.strip() == '']

然后像您一样循环遍历列表。

其他变体包括

kf = [x.strip() for x in open('keyword.txt', 'r') if x.strip() != '']

kf = [x.strip() for x in open('keyword.txt', 'r') if x.strip()]

如评论所述

您的关键字列表可能包含重复的关键字。尝试使用 set 代替:

keywords = set()

for keyword in kf:
    keyword = keyword.replace('\n', "")
    keywords.add(keyword)
    print keyword

for string in sl:
    for keyword in keywords:
        if keyword in string:
            print "**"+keyword+"**"

我用这些数据试过了,它起作用了...

kf = ['anacron\n','anacron\n','CRON\n']
sl = ['a sentence with anacron\n','another sentence\n', 'one more\n', 'anacron\n','finally\n','one with CRON\n']