web-dev-qa-db-ja.com

ファイルが存在しない場合は作成します

Pythonに関するヘルプが必要です。ファイルを開こうとしていますが、ファイルが存在しない場合は、作成して書き込み用に開く必要があります。私はこれまでのところこれを持っています:

#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")

エラーメッセージは、if(!fh)行に問題があると言っています。 Perlのようにexistを使用できますか?

41

原子性が必要ない場合は、osモジュールを使用できます。

import os

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

UPDATE

Cory Kleinが述べたように、Mac OSでos.mknod()を使用するには、root権限が必要です。 Mac OSユーザーの場合、os.mknod()の代わりにopen()を使用できます。

import os

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

まず、Pythonには!演算子がありません。これはnotになります。しかし、openは黙って失敗することはありません-例外をスローします。また、ブロックは適切にインデントする必要があります-Pythonは空白を使用してブロックの包含を示します。

したがって、次のようになります。

fn = input('Enter file name: ')
try:
    file = open(fn, 'r')
except IOError:
    file = open(fn, 'w')
31
Antti Haapala
'''
w  write mode
r  read mode
a  append mode

w+  create file if it doesn't exist and open it in write mode
r+  open an existing file in read+write mode
a+  create file if it doesn't exist and open it in append mode
'''

例:

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

これがお役に立てば幸いです。 [FYIはpythonバージョン3.6.2を使用しています]

17
Gajendra D Ambi

input()はPython 3を意味し、最近のPython 3バージョンはIOError例外を非推奨にしました(現在はOSErrorのエイリアスです)。したがって、Python 3.3以降を使用していると仮定します。

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

私はこれがうまくいくと思う:

#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')

また、開きたいファイルがfnであったときに、fh = open ( fh, "w")を誤って書きました。

このメソッドでファイルを開くたびに、「w +」または「w」に関係なく、ファイル内の古いデータが破棄されることに注意してください。

import os

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

最初に、再現不可能な条件に応じて、最終的にOR書き込み用に開くことができるファイルオブジェクトを作成したくないことを言及します。 fileobjectで何をしたいかに応じて、使用できるメソッド(読み取りまたは書き込み)を知る必要があります。

とはいえ、try:... except:を使用して、That One Random Scrubが提案したとおりに実行できます。 pythonのモットーによると、実際にはそれが提案された方法です。「許可よりも許しを求める方が簡単です」。

ただし、存在を簡単にテストすることもできます。

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")

注:input()は入力されたテキストを実行しようとするため、input()ではなくraw_input()を使用します。誤ってファイル「import」をテストしたい場合、SyntaxErrorが発生します。

0
Michael S.