是否可以使用os.sep代替" /"在网址中

时间:2014-07-23 10:28:17

标签: python django

似乎是os.sep返回“/”作为分隔符,我想知道我是否可以使用它来创建一个URL: 例如。获取类似https://some.domain.com/catalogs

的网址
   protocol + request.get_host() + os.sep + get_file_name() 
  • 这会导致任何问题吗? Or
  • urllib / 2中有什么可以加入uris吗?

3 个答案:

答案 0 :(得分:4)

os.sep将在Windows上返回\ - 这是否是您想要的取决于您认为使用的协议,但从广义上讲,我认为os.sep isn&#39 ; t适用于不使用file://的网址(即使它有问题)。

您可能会发现urlparse有用:https://docs.python.org/2/library/urlparse.html

答案 1 :(得分:3)

来自文档:

  

操作系统用于分隔路径名的字符   组件。这是' /'对于POSIX和' \'对于Windows。注意   知道这不足以解析或连接   pathnames - 使用os.path.split()和os.path.join() - 但它确实如此   偶尔有用。也可以通过os.path。

获得

所以,注意使用安全。

对于URI解析,拆分,加入等,您应该使用urllib.parse库。 (在python 2中称为urlparse

答案 2 :(得分:3)

os.sep为您提供当前系统文件系统路径的分隔符。您的系统路径和URI路径不相同。

RFC 3986给出:

  

路径由一系列由斜杠分隔的路径段组成      (" /")字符。

如果您有http://foo.bar.baz/a/b/c/d之类的URI,则应使用urlsplit将其拆分为组件并提取path部分。然后,您可以安全地使用.split('/')来获取此路径的各个部分,或使用'/'.join从段构建路径(如果您知道每个段根据语法是有效的段)。

语法不允许此/成为路径段中除分隔符以外的任何内容,请检查RFC是否更加确定。但这并不适用于整个网址,/在其他网址部分中表示不同的内容。

urlsplit相反的是urlunsplit,一旦你有了组装路径,它就可以做你想要的。

为了安全起见,您应该使用/在使用urllib.quote('/test', '')加入/之前对各个路径部分进行百分比编码(请注意,第二个参数 - {{1}}不会在此处转义默认设置。)