2017-03-28 114 views
-5

我想在Python中創建一個空文件。但我有困難創造one..Below是我用來創建Python代碼,但它給了我錯誤:如何在python中創建空文件

gdsfile = "/home/hha/temp.gds" 
if not (os.path.isfile(gdsfile)): 
    os.system(touch gdsfile) 

錯誤我: 文件「/home/hha/bin/test.py」,行29 使用os.system(觸摸gdsfile) ^ 語法錯誤:無效的語法

但在命令行中,我能夠創建一個使用新的文件:觸摸

非常感謝您的幫助 霍華德

+3

「os.system」的參數需要是一個字符串。這不是你現在通過的。另外,當你可以使用Python自己的'open'方法時,沒有理由調用'touch'命令。 – larsks

回答

5

首先你有一個語法錯誤,因爲os.system()需要一個字符串參數,而你沒有提供一個。這將解決您的代碼:

os.system('touch {}'.format(gdsfile)) 

它構造一個字符串,並將其傳遞到os.system()

但更好的方法(在Python> = 3.3)是簡單地使用open()內置打開文件:

gdsfile = "/home/hha/temp.gds" 
try: 
    open(gdsfile, 'x') 
except FileExistsError: 
    pass 

這指定模式x這意味着獨家創作 - 動作,如果已經在文件失敗存在,但如果不存在則創建它。

這比使用os.path.isfile()後跟open()更安全,因爲它避免了在檢查和創建之間可能由另一個進程創建文件的潛在競爭條件。


如果您正在使用Python 2,或Python 3的早期版本,您可以用os.open()打開該文件與專屬標誌。

import os 
import errno 

gdsfile = "/home/hha/temp.gds" 
try: 
    os.close(os.open(gdsfile, os.O_CREAT|os.O_EXCL)) 
except OSError as exc: 
    if exc.errno != errno.EEXIST: 
     raise 
+0

我建議在'open'前添加'with',這樣它會自動清理返回的文件句柄,例如'打開(gdsfile,'x')作爲touched_file:通過' – Gino