我的脚本必须在Linux和Windows中运行.并且脚本接收2个模式字符串作为参数.
A:"C:\test" or "/usr/local/test" (with no suffix) B:"C:\test\" or "/usr/local/test/" (with suffix "\","/")
以下代码没有问题.但我不想使用特定字符"/".因为它接近bug,我想.你有什么想法吗?
# -*- coding: utf-8 -*- import argparse def parse_args(): parser = argparse.ArgumentParser(description='This script is ...') parser.add_argument('--confdir', type=str, required=True) parser.add_argument('--outdir', type=str, required=True) return parser.parse_args() if __name__ == '__main__': args = parse_args() # "C:/test" or "C:/test/" in Windows # "/usr/local/test" or "/usr/local/test/" in Linux print(args.confdir) f = open(args.confdir + "/" + 'sample.txt') print(f.read())
jfs.. 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())
ShadowRanger.. 5
使用os.path.join
是最好的方法,取代:
open(args.confdir + "/" + 'sample.txt')
有:
open(os.path.join(args.confdir, 'sample.txt'))
os.path.join
将正确地防止加倍分隔符,因此如果confdir
以斜杠结尾无关紧要,它将仅产生一个斜杠产生输出.
在极少数情况下,可能要使用os.sep
和os.altsep
替代,但是这是罕见的.您可能使用它们的主要原因是lstrip
在路径组件上明确地删除不正确的前导斜杠; 尾部斜杠无关紧要(os.path.join
重复数据删除),但是前导斜杠被视为绝对路径的开头,并丢弃以前的组件.
您可以使用诸如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())
使用os.path.join
是最好的方法,取代:
open(args.confdir + "/" + 'sample.txt')
有:
open(os.path.join(args.confdir, 'sample.txt'))
os.path.join
将正确地防止加倍分隔符,因此如果confdir
以斜杠结尾无关紧要,它将仅产生一个斜杠产生输出.
在极少数情况下,可能要使用os.sep
和os.altsep
替代,但是这是罕见的.您可能使用它们的主要原因是lstrip
在路径组件上明确地删除不正确的前导斜杠; 尾部斜杠无关紧要(os.path.join
重复数据删除),但是前导斜杠被视为绝对路径的开头,并丢弃以前的组件.