亲爱的社区我有一个问题,虽然这似乎不是什么大事,但它夺走了我的睡眠。我不需要睡觉,我需要答案!
我想打开一个文件,如果字符串“修改”在文件的内容中,我想打印(‘已经修改’),然后在这里打印文件的内容是我的代码:
with open(f"contents\\docs.txt", "r") as f:
if "MODIFIED" in f.readlines():
print("already modified")
print(f.readlines())
print()这似乎是可以的,但奇怪的是,文件不包含字符串“修改”,所以它只需要正常打印文件的内容,但只返回一个空的列表[]!(文件不是空的!)如果我在没有if语句的情况下运行它,它通常会以它应该返回的方式返回内容。
with open(f"contents\\docs.txt", "r") as f:
#if "MODIFIED" in f.readlines():
#print("already modified")
print(f.readlines())
print()我只是不明白,if语句会对代码返回空列表的代码做什么。
before the flood
david attenborough: a life on our planet
an inconvenient truth
home 2009
kiss the ground 2020
seaspiracy 2020
cosmos这是我第一次遇到这种情况,我该怎么称呼它呢,小虫?
如果你们能帮我找出出了什么问题,我会很感激
发布于 2022-09-06 16:49:32
当您从一个文件中读取时,它会保存您停止的位置。readlines读取整个文件,所以当您再次调用readlines时,就没有什么可读的了。将其存储在一个变量中:
with open(f"contents\\docs.txt", "r") as f:
lines = f.readlines()
if "MODIFIED" in lines:
print("already modified")
print(lines)注意:除非您在每一行的末尾去掉尾随的'\n's,否则仍然无法工作。另一种方法是通过一个lines加入\n,这样就可以得到一个字符串,而不是一个列表。
with open(f"contents\\docs.txt", "r") as f:
lines = f.readlines()
if "MODIFIED" in '\n'.join(lines):
print("already modified")
print(lines)然而,这不是一个好做法,因此这是另一种选择:
with open(f"contents\\docs.txt", "r") as f:
lines = f.read().splitlines()
if "MODIFIED" in lines:
print("already modified")
print(lines)splitlines没有尾随的\n。
发布于 2022-09-06 17:04:15
"MODIFIED" in f.readlines()将始终计算为False,因为"MODIFIED"是string,而f.readlines()是str的list。因此,它将将"MODIFIED"与该list的每个元素进行比较。正如This Answer readlines所指出的,它还会为每一行添加尾随\n,因此即使您的文件包含MODIFIED,它实际上也会被读取为MODIFIED\n,从而使计算结果转到False。但是,正如Aran在评论中指出的那样,如果文件中的最后一行是True,并且在文件末尾没有newline,则计算结果可以变成newline。
如果将字符串与另一个字符串进行比较,尾随\n不会影响您的比较,因为in检查的是in,而不是等式,=就是这样做的。因此,"MODIFIED" in "IAMAMODIFIEDSTRING"就是True。
正确的做法是将其替换为in f.read(),它使解决方案如下:
with open(f"contents\\docs.txt", "r") as f:
data = f.read()
if "MODIFIED" in data:
print("already modified")
print(data)
print()但是,如果您想确保MODIFIED是独立的,那么您可以这样做:
with open(f"contents\\docs.txt", "r") as f:
data = f.readlines()
if "MODIFIED" in [line.strip() for line in data]:
print("already modified")
print('\n'.join(data))
print()https://stackoverflow.com/questions/73625360
复制相似问题