检查文件目录是否存在的最优雅方法是什么,如果不存在,使用Python创建目录?这是我尝试过的:
import os
file_path = "/my/directory/filename.txt"
directory = os.path.dirname(file_path)
try:
os.stat(directory)
except:
os.mkdir(directory)
f = file(filename)
Run Code Online (Sandbox Code Playgroud)
不知何故,我错过了os.path.exists(感谢kanja,Blair和Douglas).这就是我现在拥有的:
def ensure_dir(file_path):
directory = os.path.dirname(file_path)
if not os.path.exists(directory):
os.makedirs(directory)
Run Code Online (Sandbox Code Playgroud)
是否有"开放"的标志,这会自动发生?
我正在编写一个shell脚本,在AIX上的KornShell(ksh)下运行.我想使用该mkdir命令创建一个目录.但目录可能已经存在,在这种情况下我不想做任何事情.因此,我想测试以查看该目录不存在,或者抑制在mkdir尝试创建现有目录时抛出的"File exists"错误.
有关如何最好地做到这一点的任何想法?
可能重复:
python中的mkdir -p功能
说我想制作一个文件:
filename = "/foo/bar/baz.txt"
with open(filename, "w") as f:
f.write("FOOBAR")
Run Code Online (Sandbox Code Playgroud)
这给了一个IOError,因为/foo/bar不存在.
什么是自动生成这些目录的最pythonic方式?难道真的要我明确调用os.path.exists并os.mkdir在每个单独的一个(即/富,则/富/条)?
我想将程序的输出信息放到一个文件夹中.如果给定文件夹不存在,则程序应该创建一个新文件夹,文件夹名称与程序中给出的一样.这可能吗?如果是,请告诉我如何.
假设我已经给出了文件夹路径,"C:\Program Files\alex"并且alex文件夹不存在则程序应该创建alex文件夹,并且应该将输出信息放在alex文件夹中.
是否有Python方法以递归方式创建目录?我有这条道路:
/home/dail/
Run Code Online (Sandbox Code Playgroud)
我想创造
/home/dail/first/second/third
Run Code Online (Sandbox Code Playgroud)
我可以递归地执行此操作,还是必须在另一个目录之后创建一个目录?
同样的事情:
我可以递归地执行chmod和chown而不为每个文件/目录分配权限吗?
我很困惑使用这两种os方法来创建新目录.
请给我一些Python的例子.
例如,在一个简单的目录创建操作中,我可以像这样制作一个OSError:
(Ubuntu Linux)
>>> import os
>>> os.mkdir('foo')
>>> os.mkdir('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 17] File exists: 'foo'
Run Code Online (Sandbox Code Playgroud)
现在我可以像这样抓住这个错误:
>>> import os
>>> os.mkdir('foo')
>>> try:
... os.mkdir('foo')
... except OSError, e:
... print e.args
...
(17, 'File exists')
Run Code Online (Sandbox Code Playgroud)
是否有一种跨平台的方式,我可以知道17或"文件存在"将始终意味着相同的事情,以便我可以根据情况采取不同的行动?
(这是在另一个问题中出现的.)
这有效:
mkdir('folder')
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
mkdir('folder/subfolder')
Run Code Online (Sandbox Code Playgroud)
错误:
WindowsError: [Error 3] The system cannot find the path specified: 'folder/subfolder'
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Python创建和写入文本文件.我搜索过,无法找到此错误的解决方案/原因.
这是不起作用的代码:
afile = 'D:\\temp\\test.txt'
outFile = open(afile, 'w' )
outFile.write('Test.')
outFile.close()
# Error: 2
# Traceback (most recent call last):
# File "<maya console>", line 1, in <module>
# IOError: [Errno 2] No such file or directory: 'D:\\temp\\test.txt' #
Run Code Online (Sandbox Code Playgroud)
我找到的大多数答案都与路径中的斜线有关,所以......
I tried 'D:/temp/test.txt' and got an error.
I tried r'D:\temp\test.txt' and got an error.
Run Code Online (Sandbox Code Playgroud)
当我尝试在D的根目录创建文件时:/我已成功.
'D:/test.txt' works.
'D:\\test.txt' works.
r'D:\test.txt' works.
Run Code Online (Sandbox Code Playgroud)
在尝试创建文件时,似乎无法创建我想要的目录路径.在Windows上使用Python在特定路径上创建文件的正确方法是什么(7)?我误解open()可以做什么?如果它们不存在,它是否会创建目录,或者在"写入"模式下使用open()创建文件之前是否需要显式创建目录路径?
我想在我的应用程序中使用python的日志框架,我想允许我的应用程序的最终用户指定日志文件.(通过Python日志框架的配置机制,在我的例子中是YAML文件的一部分,最终用户可以编辑该文件以指定日志记录的行为方式.)
有没有办法通过创建它来获取日志框架以确保目录存在?因为日志文件名的确切路径嵌入在最终用户指定的配置信息中,所以作为应用程序编写者解析此信息以确定应创建哪个目录对我来说非常重要.
如果最终用户指定"foo/bar/baz.log",我想确保创建了foo/bar目录.
注意:这是关于Java日志记录的这个SO问题的Python等价物.