对于Python open()函数,哪一个更有效?[duplicate]

eqoofvh9  于 2022-12-28  发布在  Python
关注(0)|答案(4)|浏览(174)
    • 此问题在此处已有答案**:

Is it better to open/close a file every time vs keeping it open until the process is finished?(4个答案)
18小时前关门了。
我很好奇,无论何时需要,调用open()函数进行文件写入/追加与在整个程序中打开连接之间是否存在性能或资源差异。
所以基本上

with open('random.log', 'w') as f: 
  f.write('new log1')
    .
    .
    .
with open('random.log', 'w') as f: 
  f.write('new log2')
    .
    .
    .
with open('random.log', 'w') as f: 
  f.write('new log3')

对比

with open('random.log', 'w') as f: 
  f.write('new log1')
    .
    .
    .
  f.write('new log2')
    .
    .
    .
  f.write('new log3')

我想知道在需要多个文件操作的情况下使用Python中的open()方法的最佳实践。

wf82jlnq

wf82jlnq1#

保持文件打开直到你不再需要它是非常有效的,所以如果你需要在整个程序中保持它打开,那么在程序结束之前不应该关闭它。
每次对open()的调用都会对操作系统发出一个syscall(“system call”的缩写),要求它为程序做一些特殊的事情,比如打开/关闭文件,从网络获取数据,或者其他各种事情。syscall的开销更大,因为它们必须通过操作系统,而不仅仅是Python标准库,所以只有在必要的时候才能调用它们。
为了证明这一点,我用timeit对两个示例进行了计时:

import timeit

print(timeit.timeit("""
with open('random.log', 'w') as f: 
  f.write('new log1')

with open('random.log', 'w') as f: 
  f.write('new log2')

with open('random.log', 'w') as f: 
  f.write('new log3')
                    """, number=1000))

print(timeit.timeit("""
with open('random2.log', 'w') as f: 
  f.write('new log1')
  f.write('new log2')
  f.write('new log3')
                    """, number=1000))

这是结果:

0.8310379990143701
0.27580801700241864

调用open()一次几乎快了3倍

goqiplq2

goqiplq22#

我运行以下代码进行测试:

import time

t0 = time.time()

for i in range(10000):
    with open('random.log', 'w') as f: 
        f.write('new log1')
    with open('random.log', 'w') as f: 
        f.write('new log2')
    with open('random.log', 'w') as f: 
        f.write('new log3')

print(time.time() - t0)

t0 = time.time()

for i in range(10000):
    with open('random.log', 'w') as f: 
        f.write('new log1')
        f.write('new log2')
        f.write('new log3')

print(time.time() - t0)

这将给出以下输出:

30.80701231956482
11.21492624282837

我并不感到惊讶,因为“打开”一个文件需要一些时间,你做得越少,代码就越快。

bcs8qyzn

bcs8qyzn3#

我看到的唯一区别是,一开始,你是多次打开同一个文件并写入它。在第二个场景中,你是打开它一次并写入,然后执行一些操作,然后再次写入而不关闭它。在我看来,最好打开文件一次并执行操作,然后使用close将其关闭()。第一种方法可能会占用一些额外的时间,因为您要多次打开同一个文件(并假设您每次都关闭它们)。然而,这两种方法都不应该消耗太多的资源或花费太长的时间,除非您采用第一种方法并且涉及大量的阅读和其他操作。这是我的观点,但这里有一些资源,以获得进一步的信息:Quora Q/A

k4emjkb1

k4emjkb14#

开函数('random.log','w')为f:f.写(“新的log1”)......并打开(“随机. log”,“w”)作为f:f.写(“新log2”)......并打开(“随机. log”,“w”)作为f:f.写入(“新log3”)与
开函数('random.log','w')为f:f.写入(“新日志1”)... f.写入(“新日志2”)... f.写入(“新日志3”)

相关问题