Maak een bestand als het niet bestaat

Ik probeer een bestand te openen en als het bestand niet bestaat, moet ik het maken en openen om te schrijven. Ik heb dit tot nu toe:

#open file for reading
fn = input("Enter file to open: ")
fh = open(fn,'r')
# if file does not exist, create it
if (!fh) 
fh = open ( fh, "w")

De foutmelding zegt dat er een probleem is op de regel if(!fh). Kan ik existgebruiken zoals in Perl?


Antwoord 1, autoriteit 100%

Als je geen atomiciteit nodig hebt, kun je de os-module gebruiken:

import os
if not os.path.exists('/tmp/test'):
    os.mknod('/tmp/test')

UPDATE:

Zoals Cory Kleinal zei, op Mac OS voor het gebruik van os.mknod()je hebt root-rechten nodig, dus als je een Mac OS-gebruiker bent, kun je open()in plaats van os.mknod()

import os
if not os.path.exists('/tmp/test'):
    with open('/tmp/test', 'w'): pass

Antwoord 2, autoriteit 72%

'''
w  write mode
r  read mode
a  append mode
w+  create file if it doesn't exist and open it in (over)write mode
    [it overwrites the file if it already exists]
r+  open an existing file in read+write mode
a+  create file if it doesn't exist and open it in append mode
'''

voorbeeld:

file_name = 'my_file.txt'
f = open(file_name, 'a+')  # open file in append mode
f.write('python rules')
f.close()

Ik hoop dat dit helpt. [Ter info, ik gebruik python versie 3.6.2]


Antwoord 3, autoriteit 47%

Ten eerste, in Python is er geen !operator, dat zou notzijn. Maar openzou ook niet stilzwijgend falen – het zou een uitzondering veroorzaken. En de blokken moeten correct worden ingesprongen – Python gebruikt witruimte om blokinsluiting aan te geven.

Zo krijgen we:

fn = input('Enter file name: ')
try:
    file = open(fn, 'r')
except IOError:
    file = open(fn, 'w')

Antwoord 4, autoriteit 29%

Hier is een snelle twee-lijns tekst die ik gebruik om snel een bestand te maken als het nog niet bestaat.

if not os.path.exists(filename):
    open(filename, 'w').close()

Antwoord 5, autoriteit 18%

Het gebruik van input()impliceert Python 3, recente Python 3-versies hebben de uitzondering IOErrorafgeschaft (het is nu een alias voor OSError). Dus aangenomen dat je Python 3.3 of hoger gebruikt:

fn = input('Enter file name: ')
try:
    file = open(fn, 'r')
except FileNotFoundError:
    file = open(fn, 'w')

Antwoord 6, autoriteit 10%

Ik denk dat dit zou moeten werken:

#open file for reading
fn = input("Enter file to open: ")
try:
    fh = open(fn,'r')
except:
# if file does not exist, create it
    fh = open(fn,'w')

Bovendien heb je fh = open ( fh, "w")verkeerd geschreven toen het bestand dat je wilde openen fn

was


Antwoord 7, autoriteit 4%

Wees gewaarschuwd, elke keer dat het bestand met deze methode wordt geopend, worden de oude gegevens in het bestand vernietigd, ongeacht ‘w+’ of gewoon ‘w’.

import os
with open("file.txt", 'w+') as f:
    f.write("file is opened for business")

Antwoord 8

Laat me eerst vermelden dat u waarschijnlijk geen bestandsobject wilt maken dat uiteindelijk kan worden geopend voor lezen OF schrijven, afhankelijk van een niet-reproduceerbare voorwaarde. Je moet weten welke methoden kunnen worden gebruikt, lezen of schrijven, wat afhangt van wat je met het bestandsobject wilt doen.

Dat gezegd hebbende, je kunt het doen zoals That One Random Scrub voorstelde, met try: … behalve:. Eigenlijk is dat de voorgestelde manier, volgens het python-motto “Het is gemakkelijker om vergiffenis te vragen dan toestemming”.

Maar je kunt ook eenvoudig testen op bestaan:

import os
# open file for reading
fn = raw_input("Enter file to open: ")
if os.path.exists(fn):
    fh = open(fn, "r")
else:
    fh = open(fn, "w")

Opmerking: gebruik raw_input() in plaats van input(), omdat input() zal proberen de ingevoerde tekst uit te voeren. Als u per ongeluk wilt testen op bestand “import”, krijgt u een SyntaxError.


Antwoord 9

Als je de maplocatie weet en de bestandsnaam het enige onbekende is,

open(f"{path_to_the_file}/{file_name}", "w+")

als de maplocatie ook onbekend is

probeer het te gebruiken

pathlib.Path.mkdir

LEAVE A REPLY

Please enter your comment!
Please enter your name here

1 × 1 =

Other episodes