避免在 Python 中多次打开/关闭文件

时间:2020-12-30 21:08:19

标签: python python-3.x

我编写了我的第一个 Python 脚本 (yay) 用于对 Postgres 数据库执行查询:计算表中的行数,根据日期条件从该表中删除行,然后再次计算行数以表明删除确实成功。对于这些部分中的每一个,都会打开、更新和关闭一个文件,以记录完成的每项任务。

然而,同行的评论让我想知道是否有更好的方法来处理对文件的写入,而不是在每个任务中打开和关闭它。他提到了 python 的 logging 库,但根据我的经验,我觉得我可能会错过它的实用程序,因为它与可以改进文件写入的内容有关。

这是脚本的片段,显示了我目前正在做的事情:

cur = con.cursor()
cur.execute("SELECT COUNT(*) OVER() FROM test LIMIT 1")
rows = cur.fetchall()

for row in rows:
    logFile = open('/var/log/test_script.log', 'a')
    print("Pre-Delete Row Count =", row[0], file = logFile)
    logFile.close()

关于如何根据代码段改进写入文件的想法?

2 个答案:

答案 0 :(得分:1)

您可以将文件的开头移动到 for 循环上方:

cur = con.cursor()
cur.execute("SELECT COUNT(*) OVER() FROM test LIMIT 1")
rows = cur.fetchall()

with open('/var/log/test_script.log', 'a') as logFile:
    for row in rows:
        print("Pre-Delete Row Count =", row[0], file=logFile)

请注意,将文件用作上下文管理器时,您不再需要关闭该文件。

答案 1 :(得分:1)

首先,您可以使用上下文管理器语法来管理文件,其次,您可以将打开的上下文放在 for 循环之外;见示例:

cur = con.cursor()
cur.execute("SELECT COUNT(*) OVER() FROM test LIMIT 1")
rows = cur.fetchall()

with open('/var/log/test_script.log', 'a') as f:
    for row in rows:
        print("Pre-Delete Row Count =", row[0], file = f)