Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将url转换为目录_Python_Url_Directory - Fatal编程技术网

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路径命名约定