代码之家  ›  专栏  ›  技术社区  ›  Harley Holcombe

在python中打开文件时,“wua”模式是什么?

  •  4
  • Harley Holcombe  · 技术社区  · 15 年前

    我最近已经介绍了一些Windowspython2.4代码,并遇到了以下问题:

    self.logfile = open(self.logfile_name, "wua")
    

    我知道什么 w , u a 自己去做,但是当你把它们结合起来时会发生什么?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Stephan202 Alex Martelli    15 年前

    这个 a 是多余的。 wua 是一样的 wu 自从 w 首先出现,因此将截断文件。如果你颠倒顺序,也就是说, auw ,这和 au . 可视化:

    >>> f = open('test.txt', 'r')
    >>> f.read()
    'Initial contents\n'
    >>> f.close()
    >>> f = open('test.txt', 'wua')
    >>> print >> f, 'writing'
    >>> f.close()
    >>> f = open('test.txt', 'r')
    >>> f.read()
    'writing\n'
    >>> f.close()
    >>> f = open('test.txt', 'auw')
    >>> print >> f, 'appending'
    >>> f.close()
    >>> f = open('test.txt', 'r')
    >>> f.read()
    'writing\nappending\n'
    >>> f.close()
    

    (提醒:两者都) W open the file for writing ,但前一个附加,另一个截断。)

        2
  •  3
  •   alexn    15 年前

    我没注意到你知道修改器做了什么。结合起来,它们将执行以下操作:

    A和W加在一起是多余的,因为两者都可以用来写作。使用w时,文件将被覆盖。使用时,所有新文本都附加在现有内容之后。

    U表示“打开文件XXX,作为文本文件输入,具有通用换行解释”。

    • W是用来写的
    • A是用于追加的
    • 你会 转换文件以使用定义的 换行符。

    这里更多: http://codesnippets.joyent.com/posts/show/1969

        3
  •  2
  •   brotchie    15 年前

    在引擎盖下面,python 2.4通过内置的 open 对操作系统的参数 fopen 功能。在某些情况下,python会对模式字符串进行一些修改。

    if (strcmp(mode, "U") == 0 || strcmp(mode, "rU") == 0)
        mode = "rb";
    

    所以如果你通过一个大写字母 U rU 它将打开文件进行二进制读取。查看GNU libc源代码并根据描述Windows实现的msdn页面 FPEN u '选项被忽略。

    具有多个模式指示器 r “,” w “和” a “)在模式字符串中无效。这可以通过查看模式字符串解析的gnu libc实现来看到:

    switch (*mode)
    {
    case 'r':
      omode = O_RDONLY;
      break;
    case 'w':
      omode = O_WRONLY;
      oflags = O_CREAT|O_TRUNC;
      break;
    case 'a':
      omode = O_WRONLY;
      oflags = O_CREAT|O_APPEND;
      break;
    default:
      __set_errno (EINVAL);
      return NULL;
    }
    

    在模式字符串的第一个字符中搜索' R “,” W “或” '如果不是这些字符中的一个,则会引发错误。

    因此,当文件打开为“ wua “只有在不存在和截断的情况下才能打开它进行写入。” U “和” '将被忽略。