糟糕。
之后我卸载了两个pythons并重新下载了32位。
现在我试图在PowerShell中启动python后打开一个test.txt
文件,它给了我这个
>>> open('C:/test/test.txt')
<open file 'C:/test/test.txt', mode 'r' at 0x021CB7B0>
>>> open('C:/test/test.txt')
<open file 'C:/test/test.txt', mode 'r' at 0x021CB758>
>>> open('C:/test/test.txt')
<open file 'C:/test/test.txt', mode 'r' at 0x021CB7B0>
>>> open('C:/test/test.txt')
<open file 'C:/test/test.txt', mode 'r' at 0x021CB758>
并且它继续交替而根本不打开文本文件。
Windows PowerShell上的python -v
也给了我:
如何修复我的python?
答案 0 :(得分:3)
这是Python对象(包括file
返回的open
个对象)的普通行为。它与垃圾收集有关,与您遇到的安装问题无关。
当您致电open
时,会创建一个新的file
对象。文本<open file 'C:/test/test.txt', mode 'r' at 0x021CB7B0>
是文件对象的repr
。之后,当对象将被垃圾收集。稍后,当您创建另一个新对象时,可以重用第一个对象的内存。这就是为什么你可以多次看到相同的内存地址。
你看到两个地址交替的原因有点微妙。当您以交互模式运行Python解释器时,它会打印您在提示符处键入的任何表达式的值的repr
(仅跳过None
)。它还将最近打印的值存储在变量_
(单个下划线)中。这意味着每次打开该文件时,返回的file
对象都会在短时间内绑定到_
。当您创建下一个file
对象时,它会替换_
中的第一个对象,并且旧文件会被垃圾收集(因为它不会被代码的任何其他部分引用)。
当您创建第三个文件时,它会重复使用第一个文件的内存,因为它现在是免费的。它再次重新绑定_
,因此第二个文件对象被垃圾收集。现在,当您创建第四个文件时,它会重用第二个文件中的内存。如果你要继续创建和销毁文件对象(中间没有做任何其他事情),交替的内存地址将无限期地继续。
如果您的代码编写方式略有不同,您会得到不同的结果。例如,如果在创建它之后将每个新打开的file
对象附加到列表中,它们都会得到不同的内存地址(因为它们同时存在于内存中)。
file_objects = []
for i in range(5):
file_objects.append(open('C:/test/test.txt'))
print file_objects
然而,虽然这说明了正在发生的事情,但听起来你真正想要的是打开并阅读文件的内容。为此,您需要在read
的文件对象上调用open
方法。最佳做法是使用调用open
作为with
语句的一部分,因为这可确保文件在完成后再次关闭:
with open('C:/test/test.txt') as f: # open the file, bind the file object to name f
text = f.read() # read the file contents into text
# the file is closed when the indented block ends
print text # print the contents read from the file
答案 1 :(得分:0)
嗯,这是缩进的结果。 open()
会返回file-object
如果您想阅读内容,那么您可以使用
open(r'C:\test\test.txt').read()
但是使用这样的东西会更好,
with open(r'C:\test\test.txt') as f:
print f.read();