python中的文本处理

2024-04-20 07:55:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码,它在一个文件中查找,每次从一个新的行中提取5000个单词。parsing是我的变量,在这里它等于“经济学家”。如果“data”文件中的单词在parsing内,则该单词将追加到输出列表中。在

问题是为什么单词'on''no'要重复追加?这种情况发生在其他一些短语上,而不一定是所有短语。单词'on'和{}在数据文件中只重复一次。在

使用set有助于重复,但是有些单词在短语中重复,所以我就失去了它们。在

我将文件读入数据的代码:

data = [line.strip() for line in open("words.txt", 'r')]

output = []
for each in data: 
        if parsing != "" and each in parsing:
            output.append(each) 

样品:

^{pr2}$

以及

phrase = timesonline  # with this one 'in' gets repeated and not no
sortedout = ['online', 'online', 'time', 'line', 'line', 'son', 'in', 'on', 'so', 'me', 'in', 'on', 'so', 'in']

这是一个黑客等级的挑战。这是 数据文件,假设它在本地驱动器上,并且是挑战。在

当我这样做时[d for d in data if d == "on" ]它返回多个“on”,不应该返回。在


Tags: and文件no代码inforoutputdata
1条回答
网友
1楼 · 发布于 2024-04-20 07:55:10

您正在检查一个字符串是否在另一个字符串中:

if parsing != "" and each in parsing:

…所以如果parsing等于economist,那么你的语句计算结果是True,因为economistno和{},因为这些都是“economist”的子字符串。在

>>> 'on' in 'economist'
True

如果要匹配整个字符串,可以对照字符串列表检查项

^{pr2}$

因此,重新编写代码(为了清晰起见,使用一个包含多个元素的列表):

>>> data = ['economist', 'blah', 'on', 'engineer' ,'no', 'gin' ,'economist']
>>>
>>> parsing = ['economist', 'engineer']
>>> output = []
>>> for each in data:
...         if parsing != [] and each in parsing:
...             output.append(each)
...
>>> print output
['economist', 'engineer', 'economist']

编辑:
我同意你在评论中链接到的挑战中的文本意味着列表中的单词是唯一的,但它们不是。我刚刚做了一个非常简单的手动文本搜索,并计算了两次出现的on,其中五次是{},还有一次是{},就像你的结果一样。在

相关问题 更多 >