在附加模式下我的文件是否在RAM中打开?

Jaf*_*son 5 python file python-2.7 python-3.x

我写了一个代码,继续附加文件.这是它的代码:

writel = open('able.csv','a',encoding='utf-8',errors='ignore')
with open('test','r',encoding='utf-8',errors='ignore') as file:
    for i in file.readlines():
        data = functionforprocess(i)
        if data is not "":
            writel.write(data)
        if count% 10000 == 0:
            log = open('log','w')
            log.write(str(count))
            log.close()
Run Code Online (Sandbox Code Playgroud)

我的问题是:我在append模式下打开的文件是否在RAM中可用?该文件是否像缓冲区一样,意味着如果我存储datain变量然后将变量写入file等于以append模式打开文件并直接写入?

请注意,让我摆脱这种困惑.

wil*_*elm 3

追加是文件I/O的基本功能,由操作系统执行。例如,带有 mode 的 fopena或是a+POSIX 标准的一部分。对于文件 I/O,操作系统也会倾向于缓冲读取和写入;例如,对于大多数用途,没有必要确保您传递到的数据write实际上始终位于磁盘上。有时它位于操作系统某处的缓冲区中;有时操作系统会将这些缓冲区转储到磁盘。fsync如果对您很重要,您可以强制使用;这也是确保close在使用完打开的文件对象(或使用上下文管理器)后始终调用它们的一个很好的理由;如果你忘记了,你可能会因为操作系统中的缓冲区而出现奇怪的行为。

那么,回答你的问题。您打开的文件很可能在任何给定时刻都在 RAM 中。但是,据我所知,您无法使用它。您可以使用文件 I/O 方法与文件中的数据进行交互,但并不像有一个缓冲区可以获取其内存地址并读回您刚刚写入的内容。至于追加模式写入是否相当于将某些内容存储在缓冲区中然后写入磁盘,我想我会说不。任何类型的文件 I/O 写入都可能由操作系统以相同的方式进行缓冲,其高效的原因是操作系统可以决定何时刷新缓冲区。如果将内容存储在变量中,然后将它们自动写入磁盘,则您可以决定何时进行写入。

  • 不,在追加模式下,文件不在 RAM 中。只求位置到底。然后,在下一次写入时,缓冲区将被刷新并附加到末尾。 (2认同)