writel = open('able.csv','a',encoding='utf-8',errors='ignore')
with open('test','r',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()
我的问题是:我在追加模式下打开的文件是否在RAM中可用?该文件是否像缓冲区一样,意味着如果我将数据存储在变量中然后将变量写入文件等于以追加模式打开文件并直接写入?
请注意,让我摆脱这种困惑.
最佳答案
附加是文件I / O的基本功能,由操作系统执行.例如,使用模式a或a进行fopen是POSIX标准的一部分.对于文件I / O,操作系统也会倾向于缓冲读写操作;例如,对于大多数用途,没有必要确保您传递的数据实际上始终在磁盘上.有时它位于操作系统某处的缓冲区中;有时,操作系统会将这些缓冲区转储到磁盘上.如果对你很重要,你可以使用fsync强制写入;这也是一个非常好的理由,以确保在完成它们时(或使用上下文管理器)总是在打开的文件对象上调用close;如果你忘记了,你可能会因为操作系统中的那些缓冲区而产生奇怪的行为.
所以,回答你的问题.您打开的文件很可能在任何给定时刻都在RAM中.但是,据我所知,你无法使用它.您可以使用文件I / O方法与文件中的数据进行交互,但它不像是一个缓冲区,您可以获取内存地址,并回读您刚才写的内容.至于附加模式写入是否等同于将某些内容存储在缓冲区然后写入磁盘,我想我会说不.操作系统可能会以相同的方式缓冲任何类型的文件I / O写入,并且这是有效的原因是操作系统可以决定何时刷新缓冲区.如果将事物存储在变量中,然后以原子方式将其写入磁盘,则可以决定何时进行写入.