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
を使用できますか?
原子性が必要ない場合は、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
まず、Pythonには!
演算子がありません。これはnot
になります。しかし、open
は黙って失敗することはありません-例外をスローします。また、ブロックは適切にインデントする必要があります-Pythonは空白を使用してブロックの包含を示します。
したがって、次のようになります。
fn = input('Enter file name: ')
try:
file = open(fn, 'r')
except IOError:
file = open(fn, 'w')
'''
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を使用しています]
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')
私はこれがうまくいくと思う:
#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")
最初に、再現不可能な条件に応じて、最終的に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が発生します。