Python中f.read()首次打印有内容二次返回空的原因及解决方法
问题
通过文件操作读取文件内容时,单独执行print("f.read(): " + f.read())能成功返回文件文本,但执行print('"ABC" + f.read() + "ABC": ' + "ABC" + f.read() + "ABC")时,返回结果为"ABC" + f.read() + "ABC": ABCABC,第二次调用f.read()返回空值。
相关代码:
f = open(file, "r") print("f.read(): " + f.read()) // 成功返回文件中的文本 print('"ABC" + f.read() + "ABC": ' + "ABC" + f.read() + "ABC") // 意外返回 ""ABC" + f.read() + "ABC": ABCABC"
原因
文件对象的读取指针会随着read()方法的调用移动。第一次调用f.read()时,指针从文件开头移动到末尾,读取了全部内容;第二次调用f.read()时,指针已经处于文件末尾,没有内容可以读取,因此返回空字符串。
解决方法
方法1:重置文件指针到开头
在第二次调用f.read()前,使用f.seek(0)将指针重置到文件起始位置:
f = open(file, "r") print("f.read(): " + f.read()) f.seek(0) # 重置指针到文件开头 print('"ABC" + f.read() + "ABC": ' + "ABC" + f.read() + "ABC") f.close() # 操作完成后关闭文件
方法2:先读取内容到变量
一次性将文件内容读取到变量中,后续直接使用变量,避免多次调用f.read():
f = open(file, "r") content = f.read() # 把文件内容存入变量 print("f.read(): " + content) print('"ABC" + f.read() + "ABC": ' + "ABC" + content + "ABC") f.close()
方法3:使用with语句(推荐)
with语句会自动管理文件资源,无需手动关闭,同时提前读取内容到变量:
with open(file, "r") as f: content = f.read() print("f.read(): " + content) print('"ABC" + f.read() + "ABC": ' + "ABC" + content + "ABC")
内容的提问来源于stack exchange,提问作者My Car
相关产品推荐
相关产品推荐

