如何在Python和Linux中使用"/"(目录分隔符)?

hul*_*007 166 python unix linux windows

我已经在python中编写了一个代码,它使用/在一个文件夹中创建一个特定的文件,如果我想在windows中使用它不起作用的代码,有没有办法在Windows和Linux中使用代码.

在python我使用此代码:

pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')
Run Code Online (Sandbox Code Playgroud)

当我在假设Windows机器中使用我的代码时,我的代码将无法正常工作.

如何在Linux和Windows中使用"/"(目录分隔符)?

Ser*_*van 241

使用os.path.join().示例:os.path.join(pathfile,"output","log.txt").

在您的代码中将是: rootTree.write(os.path.join(pathfile,"output","log.txt"))

  • os.path.join使用更复杂的逻辑来将几个相对路径组件匹配在一起。当您只想链接它们时,`os.sep.join`是正确的选择。 (4认同)
  • 所以 `os.sep` 是分隔符字符串,谢谢您的困惑。 (4认同)

Ale*_*nko 92

使用:

import os
print os.sep
Run Code Online (Sandbox Code Playgroud)

查看分隔符在当前操作系统上的显示方式.
在您的代码中,您可以使用:

import os
path = os.path.join('folder_name', 'file_name')
Run Code Online (Sandbox Code Playgroud)


Ade*_*taş 57

你可以使用os.sep:

>>> import os
>>> os.sep
'/'
Run Code Online (Sandbox Code Playgroud)


小智 35

os.path.normpath(pathname)还应该提到它,因为它将/路径分隔符转换为\Windows上的分隔符.它还折叠冗余uplevel引用...即,A/BA/foo/../BA/./B一切变得A/B.如果你是Windows,这些都会成为A\B.

  • 这是IMO对这个问题的最佳答案,因为它在Linux和Windows中都是"如何使用"/"(目录分隔符)".而且它也非常有用 - 我更喜欢`os.path.normpath('a/b/c/d/file.ext')`而不是`os.path.join('a','b' ,'c','d','file.ext')`当我需要指定一条长路径时. (2认同)

Mar*_*oun 15

一些有用的链接可以帮助您:

  • 路径?通常有用,但不是在这里,IMO。 (3认同)
  • @glglgl的确如此.我寻找`sep`但是也无法抗拒自己发布这个(我假设OP会发现它对未来的工作有用):) (2认同)

Eug*_*ash 11

如果您有幸运行Python 3.4+,您可以使用pathlib:

from pathlib import Path

path = Path(dir, subdir, filename)  # returns a path of the system's path flavour
Run Code Online (Sandbox Code Playgroud)

或者,等效地,

path = Path(dir) / subdir / filename
Run Code Online (Sandbox Code Playgroud)

  • 现在是 2020 年,所以**这现在应该是公认的答案**。Python 开发人员添加它是为了克服“os”中的问题,它使一切变得更容易。例如 `path.read_text(encoding="utf8")`、`path.read_bytes()`、`path.resolve()`、`path.unlink()`、... (3认同)

Jac*_*int 10

做一个import os然后使用os.sep


P11*_*D8M 8

你可以使用" os.sep "

 import os
 pathfile=os.path.dirname(templateFile)
 directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
 rootTree.write(directory)
Run Code Online (Sandbox Code Playgroud)


use*_*019 5

不要自己构建目录和文件名,使用 python 包含的库。

在这种情况下,相关的是os.path。特别是 join 从目录和文件名或目录创建一个新的路径名,并从完整路径中获取文件名。

你的例子是

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)
Run Code Online (Sandbox Code Playgroud)


mr-*_*ble 5

如果有人正在寻找这样的东西:

他/她想知道父目录,然后转到子文件夹,也许还想知道特定文件。如果是这样,我使用以下方法。

  1. 我现在使用的是 python 3.9。因此,在该版本中,我们有os模块来处理此类任务。因此,为了获取父目录:
parent_dir = os.path.pardir
Run Code Online (Sandbox Code Playgroud)
  1. 最好不要对文件路径分隔符(/ 或 \)进行硬编码。相反,使用上述os模块提供的操作系统相关机制。它使您的代码非常适合其他目的/人重用。它是这样的(只是一个例子):

path = os.path.pardir + os.sep + 'utils' + os.sep + 'properties.ini'

print(f'The path to my global properties file is :: {path}')

输出:

..\utils\properties.ini

您当然可以在这里查看整个文档: https ://docs.python.org/3/library/os.html