【问题标题】:Python os.write(filehandler, data) : TypeError An Integer RequiredPython os.write(filehandler, data):TypeError 需要一个整数
【发布时间】:2013-06-02 19:43:23
【问题描述】:

我得到属性错误:'int' 对象没有属性'write'。

这是我的脚本的一部分

data = urllib.urlopen(swfurl)

        save = raw_input("Type filename for saving. 'D' for same filename")

        if save.lower() == "d":
        # here gives me Attribute Error

            fh = os.open(swfname,os.O_WRONLY|os.O_CREAT|os.O_TRUNC)
            fh.write(data)

        # #####################################################

这里是错误:

Traceback (most recent call last):
  File "download.py", line 41, in <module>
    fh.write(data)
AttributeError: 'int' object has no attribute 'write'

【问题讨论】:

    标签: python file operating-system


    【解决方案1】:

    os.open 返回文件描述符。使用os.write 写入打开的文件

    import os
    # Open a file
    fd = os.open( "foo.txt", os.O_WRONLY | os.O_CREAT | os.O_TRUNC)
    # Write one string
    os.write(fd, "This is test")
    # Close opened file
    os.close( fd )
    

    如果您不需要任何低级 API,最好使用 python 文件

    with open('foo.txt', 'w') as output_file:
        output_file.write('this is test')
    

    【讨论】:

      【解决方案2】:

      os.open() 返回文件描述符(整数),而不是文件对象。来自docs:

      注意:此函数适用于低级 I/O。正常使用,使用内置函数open(),它返回一个“文件 对象”与read() 和write() 方法(以及更多)。包装一个 “文件对象”中的文件描述符,使用fdopen()。

      您应该改用内置的open() 函数:

      fh = open(swfname, 'w')
      fh.write(data)
      fh.close()
      

      或上下文管理器:

      with open(swfname, 'w') as handle:
          handle.write(data)
      

      【讨论】:

      • 在这种情况下,内置的 open() 是不合适的,因为它缺少传递标志 O_WRONLY、O_CREAT 和 O_TRUNC 所需的低级 API。海报使用 os.open() 是正确的。如果您不熟悉此机制,请参阅@oleg 的答案,其中概述了内置 open() 和 os.open(),并提供了有关何时使用 os.open() 的一些指导。
      猜你喜欢
      • 2015-07-14
      • 2016-05-23
      • 2016-05-29
      • 1970-01-01
      • 2019-03-22
      • 2018-05-04
      • 1970-01-01
      • 2015-08-10
      • 2013-02-16
      相关资源
      最近更新 更多