如何在python中搜索字符串中的短语

时间:2016-08-24 04:23:31

标签: python file

我将文本文件更改为字符串。该字符串的格式设置为

{'AU': 'Smith, S’}, {'AU': 'James, A’}, {'AU': 'Stevens, P’}

然后我使用此代码尝试查找名称在数据中出现的次数。但是,它返回了实际的原始字符串。无论如何要解决这个问题吗?

searchfile = open('file.txt', 'r')
for line in searchfile:
     if 'author name' in line: print (line)
searchfile.close()

我想要的是打印作者姓名'

3 个答案:

答案 0 :(得分:0)

searchfile = open('test', 'r')
word = "test"
lst = []
for line in searchfile:
    a = line.split()
    for x in a:
        if x == word:
            lst.append(x)
print(lst)


searchfile.close()

这需要一些研究和测试,但它应该做你想要的:)。因此line.split()基本上将文本文件中用空格分隔的单词放入列表中。从那里,您循环检查列表是否与世界匹配。如果是这样,它会将它推入我们的列表,然后打印它,以便我们看到。

如果您正在搜索史密斯,那么它将是"史密斯,"因为没有空间隔开'并且,除非你想要创建一个删除:,' {}。

答案 1 :(得分:0)

如果您只想计算特定名称出现在字符串中的次数,您可以维护一个反映它的计数器映射。像

这样的东西
import sys

def main(some_name):
    counter_map = {}
    for x in input_string.split(','):
        if some_name in x:
            count = counter_map.get(some_name, 0)
            counter_map[some_name] = count + 1 
    print(counter_map[some_name])

if __name__ == '__main__':
    main(sys.argv[1])

并且input_string看起来像下面的

input_string = """
{'AU': 'Smith, S’}, {'AU': 'James, A’}, {'AU': 'Stevens, P’}, {'AU': 'Smith, h’}, {'AU': 'Smith, S’}, {'AU': 'James, A’}, {'AU': 'Stevens, P’}, {'AU': 'Smith, h’}, 
{'AU': 'Smith, S’}, {'AU': 'James, A’}, {'AU': 'Stevens, P’}, {'AU': 'Smith, h’}, {'AU': 'Smith, S’}, {'AU': 'James, A’}, {'AU': 'Stevens, P’}, {'AU': 'Smith, h’}, 
{'AU': 'Smith, S’}, {'AU': 'James, A’}, {'AU': 'Stevens, P’}, {'AU': 'Smith, h’}, {'AU': 'Smith, S’}, {'AU': 'James, A’}, {'AU': 'Stevens, P’}, {'AU': 'Smith, h’}, 
....
"""

在我的结尾打印出以下内容(使用更大的文件)

$ python counter.py Smith
576

答案 2 :(得分:0)

这应该是你需要的,假设整个文件是你说的字符串。它搜索给定的name参数,如果找到则打印name参数。否则会打印"not found"

file = "{'AU': 'Smith, S'},{'AU': 'James, A'},{'AU': 'Stevens, P'},{'AU': 'James, A'}"


def find_name(name, nameString):
    curWord = ""
    if name in nameString:
        print(name)
        return
    else:
        print("not found")

find_name('James, A', file) # output:'James, A'
find_name('Jane, A', file) # output: 'not found'

注意即可。它只打印一次找到的名称。如果你想要的名字打印出它发现的次数,你将不得不使用一个循环。

相关问题