如何比较文本文件中的单词?

时间:2014-08-06 22:06:49

标签: python

我有一个如下文字文件:

/john
/peter
/Sam
/Jennefer

使用以下脚本:

keyword_file = open(text_file)
j = keyword_file.readlines()

for i in range(len(j)):
    if j[i] == "/peter":
       print "yes"

虽然/peter位于文本文件中,但我没有得到打印的yes。但是当我删除" /" s,"是"打印出来。有什么问题?

2 个答案:

答案 0 :(得分:0)

这里的问题是你正在寻找整条线上的完全匹配。这包括可能包含的任何特殊ascii字符;例如newline character

如果您改为阅读文本,并逐行split,并迭代结果,您的代码就会起作用:

result = keyword_file.read()
for line in result.split('\n'):
    if line == "/peter":
       print "yes"

作为替代方案,您可以使用

for line in keyword_file:
    if line.startswith("/peter"): # or "/peter" in line
        print "yes"

如果你想避免将整个文件存储在内存中,并且仍然有一个干净的if语句,你可以使用strip()删除任何不必要的特殊字符或空格。

with open(file_name) as file_obj:
    for line in file_obj:
        if line.strip() == '/peter':
            print "yes"

答案 1 :(得分:0)

首先,您不只是在寻找/peter,而是在寻找/peter\n

其次,您可以采取以下措施来改进脚本:

  1. 使用with而非强迫您自己openclose您的文件:

    with open(text_file) as fp: <your code here>

  2. 不是阅读整个文件,而是逐行阅读:

    for line in fp: <your business logic here>

  3. 使用is代替==来比较您的字符串: See this SO answer why I'm wrong here

    <击> if line is '/peter\n': <condition if peter is found>

  4. 以下是符合您尝试的组合脚本:

    with open(text_file) as fp:
        for line in fp:
            if line == '/peter\n':
                print("yes")  # please use print(<what you want to print here>) instead of print <what you want here> for compatibility with 3.0 and readability.