如何生成文件路径?

时间:2015-12-16 04:50:22

标签: python python-3.x

我的脚本必须在Linux和Windows中运行。 并且脚本接收2个模式字符串作为参数。

  $this->createTable('negative_keyword', [
    'id' => Schema::TYPE_PK,
    'google_id' => Schema::TYPE_BIGINT,
    ...

以下代码可以正常运行。但我不想使用特定字符“/”。因为它接近bug,我想。 你有什么想法吗?

A:"C:\test" or "/usr/local/test" (with no suffix)
B:"C:\test\" or "/usr/local/test/" (with suffix "\","/")

3 个答案:

答案 0 :(得分:6)

使用os.path.join是最好的方法,取而代之的是:

open(args.confdir + "/" + 'sample.txt') 

使用:

open(os.path.join(args.confdir, 'sample.txt'))

os.path.join将正确地防止加倍分隔符,因此如果confdir以斜杠结尾并不重要,它将只生成一个斜杠。

在极少数情况下,您可能希望使用os.sep and os.altsep,但这种情况并不常见。您可能使用它们的主要原因是明确lstrip远离路径组件上不正确的前导斜杠;尾部斜杠无关紧要(os.path.join重复数据删除),但是前导斜杠被视为绝对路径的开头,并丢弃以前的组件。

答案 1 :(得分:6)

您可以使用pathlib.Path之类的对象自动处理尾随路径分隔符,例如:

#!/usr/bin/env python3
import argparse
import pathlib

parser = argparse.ArgumentParser()
parser.add_argument('--confdir', type=pathlib.Path, default='.')
args = parser.parse_args()
print(args.confdir)
path = args.confdir / 'sample.txt'
print(path)
print(path.read_text())

答案 2 :(得分:0)

变化:

open(args.confdir + "/" + 'sample.txt') 

open(args.confdir + os.sep + "sample.txt')