Python 打印文件不起作用
我正在PowerShell中使用Python 2.7。我有一段代码:Python 打印文件不起作用,python,python-2.7,Python,Python 2.7,我正在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.w
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>
为什么不给我看我的新内容?当我双击打开文件时,新添加的内容就在那里。有什么想法吗?您打印的是文件对象,而不是内容 用
“w+”
打开以进行读写:
然后使用target.seek(0)#返回文件开头
print target.readlines()#打印所有内容
文件指针位于文件的末尾,如果使用target.readlines()
或target.read()
则不会得到任何输出,您需要seek
返回文件的开头以读取内容
最好使用和
一起打开文件,因为它会自动关闭文件
with open(filename, 'w+') as target:
#new content for file
line1 = raw_input("line1: ")
line2 = raw_input("line2: ")
line3 = raw_input("line3: ")
....
打印只打印
str(文件)
的输出
如果要读取内容,请使用w+
打开文件进行读写,然后查找到开头,读取内容:
with open(filename, 'w+') as target
print >> target, "something"
...
target.seek(0)
print(target.read())
或关闭文件,然后再次打开以进行读取:
with open(filename) as f:
print f.read()
打印目标
显示目标。如果您想查看编写的内容
target.close()
。这还将刷新所有未写入的缓冲内容target=open(文件名'r')
with open(filename, 'r') as fin:
for line in fin:
print line
您实际上是在打印文件对象,而不是文件的内容。虽然不完全相同,但是考虑一下这个类比:如果你在命令提示符下的代码> dir 文件,你就不会期望看到文件内容,对吗? 如果你想获得文件的内容,你必须
打开它并读取它,就像如果你想更改文件的内容,你必须打开它并写入它一样。因此:
target.close()
source = open(filename, 'r')
print source.read()
source.close()
值得注意的是,您应该尽可能使用with
语句,而不是手动打开
和关闭
但是为什么我必须分配一个新变量呢?如果我尝试打印目标,它将不起作用。请阅读
。是因为我第一行的w吗
第一个问题是target.read
是函数对象本身。要调用函数并获得结果,需要括号:target.read()
接下来,是的,'w'
模式意味着您无法读取文件;您可能希望使用r+
或w+
来解决这个问题。(继续阅读文档,了解所有模式的功能。)
但是,即使解决了这两个问题,您也不会打印任何内容,因为在将所有内容写入目标
后,您最终会指向文件的末尾,而不是开始,并且read()
将从文件的末尾读取所有内容,而文件的末尾没有任何内容。因此,您必须target.seek(0)
才能使其工作
因此,如果要重用相同的文件对象:
target = open(filename, 'w+')
# ... all the stuff to write the file
target.seek(0)
print target.read()
target.close()
您不能在w
模式下读取文件。而且,即使你可以,这也会打印出一个列表。@abarnert,我错过了w。使用r+
可能比使用a+
更好。否则,您将更改他的代码的含义,以便它不会覆盖任何现有文件,而是附加到该文件上。您还使其不可移植到任何平台,而a
模式意味着“在每次操作之前搜索到底”。感谢您的快速响应。@AnttiHaapala:实际上,Padraic在这里使用w+
而不是r+
,可能是正确的;他要么错过了我评论中的打字错误,以为我写的东西是对的,要么他已经知道正确的东西,不需要阅读我的评论。:)谢谢你的快速回复。工作完美,没有一个循环!但是为什么我必须分配一个新变量呢?如果我尝试打印目标,它将不起作用。请阅读
。是不是因为我第一行中的w
?太棒了。谢谢!