Ответ 1
Невозможно создать файл, не открывая его os.mknod("newfile.txt")
(но он требует привилегий root для OSX). Системный вызов для создания файла на самом деле open()
с флагом O_CREAT
. Поэтому, независимо от того, как всегда, вы всегда будете открывать файл.
Таким образом, самый простой способ просто создать файл без его усечения в случае его существования:
open(x, 'a').close()
На самом деле вы можете опустить .close()
, так как GC GCControl refcounting закроет его сразу же после завершения инструкции open()
, но очистить ее, чтобы сделать это явно и полагаться на поведение, специфичное для CPython, тоже не очень хорошо.
Если вам нужно поведение touch
(т.е. обновить mtime в случае, если файл существует):
import os
def touch(path):
with open(path, 'a'):
os.utime(path, None)
Вы можете расширить это, чтобы также создать любые каталоги в пути, который не существует:
basedir = os.path.dirname(path)
if not os.path.exists(basedir):
os.makedirs(basedir)