Python将url转换为目录
我正在尝试将类似Python将url转换为目录,python,url,directory,Python,Url,Directory,我正在尝试将类似“www.example.com/images/dog.png”的url从当前目录转换为目录 因此,我得到了一个名为“www.example.com”的文件夹,在“images”中,最后在该文件夹中,文件保存为“dog.png” 我尝试过使用urllib.url2pathname(path),但它一直在它的开头追加p:\。您可以使用os.makedirs()创建目录树,但如果最终目录已经存在,则会失败。因此,您可以在尝试创建目录树之前测试它是否存在,或者使用try:。。。除操作错
“www.example.com/images/dog.png”
的url从当前目录转换为目录
因此,我得到了一个名为“www.example.com”
的文件夹,在“images”
中,最后在该文件夹中,文件保存为“dog.png”
我尝试过使用
urllib.url2pathname(path)
,但它一直在它的开头追加p:\
。您可以使用os.makedirs()
创建目录树,但如果最终目录已经存在,则会失败。因此,您可以在尝试创建目录树之前测试它是否存在,或者使用try:。。。除操作错误外:
。在Python3中,您可以提供一个exist\u ok
参数来克服这种行为,有关更多信息,请参阅的Python文档
#!/usr/bin/env python
import os
cwd = os.getcwd()
url = "www.example.com/images/dog.png"
fullname = os.path.join(cwd, url)
path, basename = os.path.split(fullname)
if not os.path.exists(path):
os.makedirs(path)
with open(fullname, 'w') as f:
f.write('test\n')
如果您的系统不支持包含句点的目录名,您可以将它们转换为另一个字符,例如
\uuu
,如下所示:
fullname = fullname.replace('.', '_')
(只需在fullname=os.path.join(cwd,url)
行之后插入此代码)
正如jwilner在评论中提到的,它的使用效率更高
path = os.path.dirname
如果您不需要文件名的基本组件(在本例中为
“dog.png”
),那么就可以使用path,basename=os.path.split(fullname)
。我使用它就像使用url2pathname(“www.google.com”)一样,它返回“p:\www.google.com”,刚刚测试了urllib.url2pathname(path)
,并在Python 2.7.13上得到了正确的结果。结果:www.example.com\images\dog.png
这不起作用,因为url的格式与路径不同directory@Shifty:它适用于我(在ext3文件系统上的Linux上)使用该URL。您使用的是不允许在路径名中使用句点的操作系统或文件系统吗?如果是这样,你应该在你的问题中提到这一点。这很容易解决,例如fullname=fullname.replace('.','''.')
我建议您使用os.path.dirname
而不是os.path.split
——您不需要basename
组件,os.path.dirname
更明确。另外,os.path.exists
调用是不必要的--os.makedirs
只生成不存在的目录。@jwilner-oth,os.makedirs
问题有点复杂。在“如果叶目录已经存在或无法创建,则引发错误异常[OSError
]。在中有一个exist\u ok
参数:“如果exist\u ok
为False
(默认值),如果目标目录已经存在,则会引发OSError
。”路径名在windows和linux之间不一致。因此,明确使用URL作为路径名不支持“\”反斜杠的windows路径命名约定