簡體   English   中英

僅當文件已存在時才附加到文件

[英]Append to file only if it already exists

在我的腳本開始時,文件script.log應該存在並且消息被附加到它。 但是如果該文件不存在(用戶已決定刪除該文件),則不應再次創建該文件,而是將消息打印到stdout 僅當您看到它時才填充桶。

怎么做?
一定有很多人遇到過類似的問題,但我找不到任何解決方案。


我的目標類似於以下代碼,但是當找不到文件時,追加模式不會觸發任何異常:

if os.path.exists('script.log'):
    with open('script.log', 'a') as f:
        f.write('foo')
else:
    print('foo')

我知道以下代碼應該可以工作,但理想情況下我想避免它,因為它包含競爭條件

 if os.path.exists('script.log'): with open('script.log', 'a') as f: f.write('foo') else: print('foo')

單獨使用os.openos.fdopen而不是open

open使用的"a"模式嘗試使用標志os.O_APPENDos.O_CREAT打開文件,如果文件不存在則創建文件。 我們將使用os.fdopen使用os.O_APPEND標志,如果它不存在,則會引發FileNotFoundError

假設它成功,我們將使用os.fdopenfdopen返回的fdopen在一個類似文件的對象中。 (不幸的是,這需要一個看似多余的"a"標志。)

import os
import sys

try:
    fd = os.open('script.log', os.O_APPEND)
    with os.fdopen(fd, "a") as f:
        f.write("foo")
except FileNotFoundError:
    print("foo")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM