打印文件不起作用

时间:2014-07-28 18:43:46

标签: 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.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>

为什么不向我展示我的新内容?当我双击打开文件时,新添加的内容就在那里。有什么想法吗?

4 个答案:

答案 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。如果你想看到写的内容,

  1. 关闭文件target.close()。这也将刷新所有未写入的缓冲内容
  2. 以读取模式target = open(filename, 'r')
  3. 重新打开文件
  4. 迭代文件以打印内容。

    with open(filename, 'r') as fin:
        for line in fin:
            print line
    

答案 3 :(得分:1)

您实际上是打印文件对象,而不是文件的内容。虽然它不完全相同,但请考虑这个类比:如果您在命令提示符中dir文件,则不希望看到文件内容,是吗?

如果您想获取文件的内容,则必须openread,就像您要更改文件内容{{1}一样它和open它。所以:

write

值得注意的是,您应该尽可能使用target.close() source = open(filename, 'r') print source.read() source.close() 语句而不是手动withopen


  

但为什么我必须分配一个新变量?如果我尝试close,它就无效。是因为我的第一行中的w?

第一个问题是print target.read是函数对象本身。要调用函数并获得结果,您需要括号:target.read

接下来,是的,target.read()模式意味着您无法读取文件;您希望使用'w'r+来解决此问题。 (阅读open上的文档,了解所有模式的作用。)

然而,即使修复这两个问题,你最终也不打印任何内容,因为在将所有内容写入w+后,你最终指向文件的末尾,而不是开头,{{1}将读取文件末尾的所有内容 - 这是什么都没有。所以,你必须target才能做到这一点。

因此,如果您想要重用相同的文件对象:

read()