为何Python文件读取判断中控制变量为False时if条件仍执行?
问题根源
你遇到的问题核心是文件对象的read()方法只能读一次:第一次调用read_config.read()时,文件指针会跑到文件末尾,第二次再调用read()就只能读到空字符串了。所以你看到print输出False(第一次读到了内容),但if里的第二次read()返回空,条件成立,自然进入了if块执行。
修复代码
解决办法很简单,把文件内容先读到变量里,后续判断都用这个变量,别反复调用read():
# 一次性读取文件内容并保存 config_content = read_config.read() # 打印判断结果 print(config_content == "") # 用保存好的内容做判断 if config_content == "": print("in if") with open(path, "w") as writeData: writeData.write(data) updateRead = open(path, "r") read_config = updateRead print("wrote data")
如果你的read_config是用二进制模式打开的(比如open(..., 'rb')),就调整成下面的写法,避免冗余的编码转换:
# 二进制模式读取时的处理 config_content = read_config.read().decode('utf-8') print(config_content == "") if config_content == "": print("in if") with open(path, "w", encoding='utf-8') as writeData: writeData.write(data) updateRead = open(path, "r") read_config = updateRead print("wrote data")
额外提示
- 你原代码里的
bytes(read_config.read(), encoding='utf-8').decode(encoding='utf-8')完全是多余的:如果是文本模式打开的文件,read()直接返回字符串,转成bytes再解码纯属多此一举;如果是二进制模式,直接decode('utf-8')就行。 - 要是你想把文件里的空白字符(比如换行、空格)也当成“空”处理,就把判断条件改成
config_content.strip() == ""。
内容的提问来源于stack exchange,提问作者HeheBoi420
相关产品推荐
相关产品推荐

