Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印文件不起作用_Python_Python 2.7 - Fatal编程技术网

Python 打印文件不起作用

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

我正在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>


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

您打印的是文件对象,而不是内容

“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
    ?太棒了。谢谢!