我的脚本必须在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 "\","/")
答案 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')