我有一个如下文字文件:
/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,"是"打印出来。有什么问题?
答案 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
。
其次,您可以采取以下措施来改进脚本:
使用with
而非强迫您自己open
和close
您的文件:
with open(text_file) as fp:
<your code here>
不是阅读整个文件,而是逐行阅读:
for line in fp:
<your business logic here>
使用 See this SO answer why I'm wrong here is
代替==
来比较您的字符串:
<击> if line is '/peter\n':
<condition if peter is found>
击>
以下是符合您尝试的组合脚本:
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.