Создать пустой файл с помощью python

Я хотел бы создать файл с пуском x с помощью python. Я использовал os.system(y), где y = 'touch %s' % (x). Я искал версию, отличную от каталога os.mkdir, но я ничего не смог найти. Есть ли такой инструмент для создания файла без его открытия или с использованием системного или всплывающего/подпроцесса?

Ответ 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)

Ответ 2

Конечно, есть способ создать файлы без открытия. Это так же просто, как позвонить os.mknod("newfile.txt"). Единственным недостатком является то, что для этого вызова требуются привилегии root в OSX.