我写了一个代码,继续附加文件。下面是它的代码:
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
存储在变量中,然后将变量写入文件等于在追加模式下打开一个文件并直接写入?在
拜托,把我从混乱中解救出来。在
^{} function 的签名是:
如果以“a”(append)模式打开,则意味着:openforwriting,如果文件存在,则追加到文件末尾。没有什么关于缓冲的。在
可以使用Buffering参数自定义缓冲。引用文件:
在您的示例中,您的文件以文本模式打开以进行追加。在
所以,在编写过程中,只有一大块数据存储在RAM中。如果你写一个“大”数据,它将被分成几个块。在
追加是文件I/O的一项基本功能,由操作系统完成。例如,带有
a
或a+
模式的fopen是POSIX标准的一部分。对于文件I/O,操作系统也倾向于缓冲读写;例如,在大多数情况下,不必确保传递给write
的数据一直都在磁盘上。有时它位于操作系统的某个缓冲区中;有时操作系统将这些缓冲区转储到磁盘上。如果对您很重要,您可以使用fsync
强制写入;这也是一个很好的理由,可以确保在处理完打开的文件对象(或使用上下文管理器)时总是调用close
;如果您忘记了,可能会因为操作系统中的缓冲区而出现奇怪的行为。在回答你的问题。在任何给定的时刻,您打开的文件都很可能在RAM中。然而,据我所知,它对你是不可用的。您可以使用文件I/O方法与文件中的数据进行交互,但这并不是说有一个缓冲区,您可以获取它的内存地址,并读回刚刚写入的内容。至于说append模式的写入是否等同于在缓冲区中存储一些内容,然后再写入磁盘,我想我会说不。任何类型的文件I/O写入都可能被OS以同样的方式进行缓冲,而这是高效的原因是操作系统可以决定何时刷新缓冲区。如果您将内容存储在一个变量中,然后以原子方式将其写入磁盘,那么您就可以决定何时进行写入。在
相关问题 更多 >
编程相关推荐