我使用python程序打开一个文件。
git reset --hard HEAD^
然后我设置一个变量:
file = open('test.txt', 'r')
还有一个:
data = file.read()
数据变量应该是字符串,data2应该是列表。打印数据工作正常,但是当我尝试打印data2时,我得到一个空列表。它为什么这样工作?为什么设置数据与data2?
答案 0 :(得分:3)
当您打开文件时,它会返回一个文件指针。这意味着您只能读取每一行一次。使用read()
后,它会读取整个文件,将文件指针移动到末尾。然后,当您使用readlines()
时,它会返回一个空列表,因为文件末尾没有任何行。
答案 1 :(得分:1)
您已使用file.read()
使用了迭代器,因此在致电readlines
时无需消耗任何内容,在调用file.seek(0)
之前需要readlines
才能重置指向文件开头的指针。
with open('test.txt') as f: # with closes your files automatically
data = f.read()
f.seek(0) # reset file pointer
data2 = f.readlines()
答案 2 :(得分:1)
设置data
会干扰data2
并非如此。相反,它正在呼叫file.read()
干扰file.readlines()
。
当您使用file = open('test.txt', 'r')
打开文件时,变量file
现在是指向该文件的指针。
因此,当您拨打file.read()
或file.readlines()
时,会移动指针file
。
file.read()
将指针移动到文件末尾,因此不再需要阅读file.readlines()
。
即使您将它们分配给不同的变量,它们最终也依赖于file
。因此,通过设置data
,您修改file
会干扰您设置data2
的尝试。
答案 3 :(得分:1)
为什么不拆分字符串而不是再次读取文件。
id<GCMReceiverDelegate>