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

2024-09-29 23:31:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个代码,继续附加文件。下面是它的代码:

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()

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

拜托,把我从混乱中解救出来。在


Tags: 文件代码logdataif模式openutf
2条回答

^{} function的签名是:

open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

如果以“a”(append)模式打开,则意味着:openforwriting,如果文件存在,则追加到文件末尾。没有什么关于缓冲的。在

可以使用Buffering参数自定义缓冲。引用文件:

buffering is an optional integer used to set the buffering policy. Pass 0 to switch buffering off (only allowed in binary mode), 1 to select line buffering (only usable in text mode), and an integer > 1 to indicate the size in bytes of a fixed-size chunk buffer. When no buffering argument is given, the default buffering policy works as follows:

  • Binary files are buffered in fixed-size chunks; the size of the buffer is chosen using a heuristic trying to determine the underlying device’s “block size” and falling back on io.DEFAULT_BUFFER_SIZE. On many systems, the buffer will typically be 4096 or 8192 bytes long.
  • “Interactive” text files (files for which isatty() returns True) use line buffering. Other text files use the policy described above for binary files.

在您的示例中,您的文件以文本模式打开以进行追加。在

所以,在编写过程中,只有一大块数据存储在RAM中。如果你写一个“大”数据,它将被分成几个块。在

追加是文件I/O的一项基本功能,由操作系统完成。例如,带有aa+模式的fopen是POSIX标准的一部分。对于文件I/O,操作系统也倾向于缓冲读写;例如,在大多数情况下,不必确保传递给write的数据一直都在磁盘上。有时它位于操作系统的某个缓冲区中;有时操作系统将这些缓冲区转储到磁盘上。如果对您很重要,您可以使用fsync强制写入;这也是一个很好的理由,可以确保在处理完打开的文件对象(或使用上下文管理器)时总是调用close;如果您忘记了,可能会因为操作系统中的缓冲区而出现奇怪的行为。在

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

相关问题 更多 >

    热门问题