Maak een leeg bestand met python [duplicate]

Ik wil graag een bestand maken met pad xmet python. Ik gebruik os.system(y)waarbij y = 'touch %s' % (x). Ik heb gezocht naar een niet-directoryversie van os.mkdir, maar ik heb niets kunnen vinden. Is er een tool zoals deze om een bestand te maken zonder het te openen, of om het systeem of popen/subproces te gebruiken?


Antwoord 1, autoriteit 100%

Er is geen manier om een bestand aan te maken zonder het te openenEr is os.mknod("newfile.txt")(maar het vereist root-rechten op OSX). De systeemaanroep om een bestand aan te maken is eigenlijk open()met de vlag O_CREAT. Dus hoe dan ook, je opent het bestand altijd.

Dus de gemakkelijkste manier om eenvoudig een bestand te maken zonder het af te kappen voor het geval het bestaat, is dit:

open(x, 'a').close()

Eigenlijk zou je de .close()kunnen weglaten omdat de refcounting GC van CPython deze onmiddellijk zal sluiten nadat de open()-instructie is voltooid – maar het is schoner om het te doen expliciet en vertrouwen op CPython-specifiek gedrag is ook niet goed.

In het geval u het gedrag van touchwilt (d.w.z. update de mtime indien het bestand bestaat):

import os
def touch(path):
    with open(path, 'a'):
        os.utime(path, None)

Je zou dit kunnen uitbreiden om ook mappen in het pad te maken die niet bestaan:

basedir = os.path.dirname(path)
if not os.path.exists(basedir):
    os.makedirs(basedir)

Antwoord 2, autoriteit 10%

Natuurlijk IS er een manier om bestanden te maken zonder ze te openen. Het is net zo eenvoudig als het aanroepen van os.mknod("newfile.txt"). Het enige nadeel is dat deze oproep root-rechten vereist op OSX.

Other episodes