我在PowerShell中使用Python 2.7。我有这段代码:
from sys import argv
script, filename = argv
target = open(filename, 'w')
#new content for file
line1 = raw_input("line1: ")
line2 = raw_input("line2: ")
line3 = raw_input("line3: ")
target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.write(line3)
target.write("\n")
#after that line the message occurs (see further down)
print target
target.close()
这是我得到的消息:
<open file 'test.txt', mode 'w' at 0x004C6230>
为什么不向我展示我的新内容?当我双击打开文件时,新添加的内容就在那里。有什么想法吗?
答案 0 :(得分:1)
您正在打印文件对象,而不是内容。
以"w+"
打开以进行读写:
然后使用target.seek(0) # go back to start of the file
print target.readlines() # print all contents
文件指针位于文件末尾,如果使用target.readlines()
或target.read()
则没有输出,则需要seek
回到文件的开头阅读内容。
最好使用with
打开文件,因为它会自动关闭它们。
with open(filename, 'w+') as target:
#new content for file
line1 = raw_input("line1: ")
line2 = raw_input("line2: ")
line3 = raw_input("line3: ")
....
答案 1 :(得分:1)
打印只打印str(file)
的输出。
如果要阅读内容,请使用w+
打开文件进行读写,然后搜索到开头,并阅读内容:
with open(filename, 'w+') as target
print >> target, "something"
...
target.seek(0)
print(target.read())
或关闭文件,然后再次打开以阅读:
with open(filename) as f:
print f.read()
答案 2 :(得分:1)
print target
显示file object。如果你想看到写的内容,
target.close()
。这也将刷新所有未写入的缓冲内容target = open(filename, 'r')
迭代文件以打印内容。
with open(filename, 'r') as fin:
for line in fin:
print line
答案 3 :(得分:1)
您实际上是打印文件对象,而不是文件的内容。虽然它不完全相同,但请考虑这个类比:如果您在命令提示符中dir
文件,则不希望看到文件内容,是吗?
如果您想获取文件的内容,则必须open
和read
,就像您要更改文件内容{{1}一样它和open
它。所以:
write
值得注意的是,您应该尽可能使用target.close()
source = open(filename, 'r')
print source.read()
source.close()
语句而不是手动with
和open
。
但为什么我必须分配一个新变量?如果我尝试
close
,它就无效。是因为我的第一行中的w?
第一个问题是print target.read
是函数对象本身。要调用函数并获得结果,您需要括号:target.read
。
接下来,是的,target.read()
模式意味着您无法读取文件;您希望使用'w'
或r+
来解决此问题。 (阅读open
上的文档,了解所有模式的作用。)
然而,即使修复这两个问题,你最终也不打印任何内容,因为在将所有内容写入w+
后,你最终指向文件的末尾,而不是开头,{{1}将读取文件末尾的所有内容 - 这是什么都没有。所以,你必须target
才能做到这一点。
因此,如果您想要重用相同的文件对象:
read()