我目前正在阅读“艰难学习Python”并已达到第16章。在写入文件后,我似乎无法打印文件的内容。它什么都不打印。
from sys import argv
script, filename = argv print "We are going to erase the contents of %s" % filename print "If you don\'t want that to happen press Ctrl-C"
print "If you want to continue press enter"
raw_input("?") print "Opening the file..." target = open(filename, "w")
print "Truncating the file..." target.truncate()
print "Now i am going to ask you for 3 lines"
line_1 = raw_input("Line 1: ")
line_2 = raw_input("Line 2: ")
line_3 = raw_input("Line 3: ")
final_write = line_1 + "\n" + line_2 + "\n" + line_3
print "Now I am going to write the lines to %s" % filename
target.write(final_write)
target.close
print "This is what %s look like now" %filename
txt = open(filename)
x = txt.read() # problem happens here
print x
print "Now closing file"
txt.close
答案 0 :(得分:1)
您不是在调用函数target.close
和txt.close
,而是只是获取指针。由于它们是函数(或方法,更准确),因此在函数名称后需要()
来调用它:file.close()
。
这就是问题;以写入模式打开文件,删除文件的所有内容。您在文件中写入但从未关闭它,因此永远不会提交更改并且文件保持为空。接下来,在读取模式下打开它,只需读取空文件。
要手动提交更改,请使用file.flush()
。或者只是关闭文件,它将自动刷新。
此外,调用target.truncate()
是没用的,因为在write
模式下打开时已经自动完成,如评论中所述。
编辑:在评论中也提到,使用with
语句非常强大,您应该使用它。您可以从http://www.python.org/dev/peps/pep-0343/阅读更多内容,但基本上与文件一起使用时,它会打开文件并在您取消注册后自动关闭它。这样您就不必担心关闭文件,而且当您可以清楚地看到文件的使用位置时,由于缩进,它看起来会更好。
快速举例:
f = open("test.txt", "r")
s = f.read()
f.close()
使用with
声明可以做得更短更好看:
with open("test.txt", "r") as f:
s = f.read()