f.read 返回空值

2 投票
6 回答
4133 浏览
提问于 2025-04-16 11:33

我现在在解释器里做这些事情。

loc1 = '/council/council1'
file1 = open(loc1, 'r')

到这个时候,我可以用 file1.read() 来读取文件内容,它会把文件的内容作为字符串打印到标准输出上。

但是如果我加上这个……

string1 = file1.read()

字符串1的结果却是空的……我完全不知道我哪里出错了。这看起来应该是最基本的操作啊!

如果我再输入一次 file1.read(),标准输出的结果就是一个空字符串。所以,似乎在我尝试用 file1.read() 创建字符串的时候,我把文件给丢掉了。

6 个回答

0

使用 with 是最好的写法,因为它在使用完文件后会自动关闭与文件的连接(从 Python 2.5 开始就这样做了):

with open('/council/council1', 'r') as input_file:
   text = input_file.read()
print(text)
3

你并不会丢失数据,只是把指针移动到了文件的末尾,然后再尝试读取更多的数据。因为已经到文件的末尾了,所以没有更多的数据可以读取,你会得到一个空字符串。你可以尝试重新打开文件或者把指针移动回文件的开头:

f.read()
f.seek(0)
f.read()
5

你只能读取一个文件一次。读取完后,当前的读取位置就在文件的末尾。

如果你在重新读取之前加上 file1.seek(0),那么你就可以再次读取文件的内容。不过,更好的方法是第一次读取的时候把内容放到一个字符串里,然后把它保存在内存中:

loc1 = '/council/council1'
file1 = open(loc1, 'r')
string1 = file1.read()
print string1

撰写回答