2017-03-28 78 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