编程语言
首页 > 编程语言> > Python非特定写入异常

Python非特定写入异常

作者:互联网

目前正在教自己Python,并通过编写脚本来学习文件I / O,以便从现有文件中读取和添加文本.脚本运行直到我调用write()方法,此时它会抛出一个非特定的异常 – 这是回溯:

            File "test.py", line 13, in <module>
                f.write(txt)
            IOError: [Errno 0] Error

我的代码:

            from sys import argv

            script, filename = argv

            f = open(filename, 'a+')

            print("The contents of %s are:") % filename

            print f.read()

            txt = raw_input("What would you like to add? ")

            f.write(txt)

            print("The new contents are:")

            print f.read()

            f.close()

我的环境是Win7,PowerShell和Notepad中的Python 2.7.3.

是什么造成的?我该如何解决?根据我的理解,访问模式应该允许我读取和附加到文件.将访问模式更改为r会产生相同的异常.

澄清:

>我有一个现有的文本文件(a.txt),其中包含一个单词,我将其作为参数传递给脚本,如下所示:

        python test.py a.txt

>我在Windows下的管理员帐户下.

结果:

至少,添加两个seek()命令可以解决问题 – 详见答案文章.

解决方法:

当一个人试图添加一个小尺寸的文本时出现问题:它保留在缓冲区中,在接收到更多数据之后,在实际写入之前保留文本.
所以,为了确保真正写,请按照有关os.fsync()和flush()的文档中的说明进行操作.

顺便说一下,最好使用with语句.

使用二进制模式仍然更好.在你的情况下,应该没有问题,因为你只需在阅读后添加文本,只需使用seek(o,o).但是当想要将文件的指针正确移动到文件的字节中时,绝对有必要使用二进制模式[open(文件名,’rb’)中的’b’]

我个人从不使用’a’,我从未理解它的影响是什么.

from sys import argv
from os import fsync

script, filename = argv

with open(filename, 'rb+') as f:
    print("The contents of %s are:") % filename
    print f.read()

    f.seek(0,2)
    txt = raw_input("What would you like to add? ")
    f.write(txt)
    f.flush()
    fsync(f.fileno())

    f.seek(0,0)
    print("The new contents are:")
    print f.read()

标签:python,file-io,python-2-7,ioerror
来源: https://codeday.me/bug/20190704/1372478.html