Python中IF语句的求值

2024-10-02 16:20:52 发布

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

请帮助我尝试理解此脚本的评估。这一定是我不明白的简单事情。我想扫描一个文本文件并输出具有特定字符串值的行

例如,我的txt文件将包含简单的内容:

beep
boop 
bop 
Hey 
beep
boop
bop

脚本正在寻找带有“Hey”的行并试图输出该行

file_path = "C:\\downloads\\test.txt"
i = 0
file_in = open(file_path,"r+") # read & write
for lines in file_in.readlines():
    i+=1
    #if lines.rfind("this entity will be skipped..."):
    if lines.find("Hey"):
        print(i, lines)
file_in.close()

出于某种原因,它会输出每一行,但找到匹配的那一行除外。这怎么可能


Tags: 文件path字符串intxt脚本ifbeep
3条回答

当然,丹尼尔的回答是正确的,应该被接受,但我想为我的强迫症火上浇油,并提供一些改进:

# use context managers to automatically release file handler
with open(file_path) as file_in:
    # file objects are iterable, will return lines 
    # reading entire file in memory can crash if file is too big
    # enumerate() is a more readable alternative to manual counters
    for i, line in enumerate(file_in):  # 'line' should be singular 
        if "Hey" in line:  # same as Daniel
             print(i, line)

if "Hey" in lines:而不是if lines.find("Hey"):可能更简单。如果您真的想使用find(),您可以这样做:if lines.find("Hey") != -1:

.find(sub)返回一个整数-如果找到sub,则返回sub的第一个索引,如果未找到,则返回-1

当“Hey”出现时,它位于第一个索引(0)处,因此.find()返回的就是这个。否则,找不到“Hey”,因此.find()返回-1

由于python将除0以外的所有整数都视为True,因此当返回0时,即当找到“Hey”时,该条件的计算结果为True

将.find()的用法更改为以您想要的方式满足if语句的用法

相关问题 更多 >