如何解决如何让argparse接受脚本中的目录?
目前,this script 只接受文件作为输入(通过 argparse)。我正在尝试编辑它,因此它也将接受路径作为输入。我该怎么做?
脚本(省略不相关部分):
#!/usr/bin/env python
import argparse
import sys
def main(args=None):
parser = argparse.ArgumentParser()
parser.add_argument("input",nargs="+",Metavar="INPUT")
parser.add_argument("-o","--output")
options = parser.parse_args(args)
for path in options.input:
if options.output and not os.path.isdir(options.output):
output = options.output
font = TTFont(path,fontNumber=options.face_index)
if __name__ == "__main__":
sys.exit(main())
解决方法
告别os.path
,欢迎pathlib
。
>>> import pathlib
>>> p = pathlib.Path("")
>>> p
PosixPath('.')
>>> p.absolute()
PosixPath('/storage/emulated/0')
>>> p = p.joinpath("log/GearLog")
>>> p
PosixPath('log/GearLog')
>>> p.is_dir()
True
>>> for file in (f for f in p.iterdir() if f.suffix == ".log"):
... print(file.name)
...
GearN_dumpState-CM.log
GearN_dumpState-CM_old.log
GearN_dumpState-WIFI_P2P.log
GearN_dumpState-HM.log
GearN_dumpState-HM_old.log
GearN_dumpState-NS_HM.log
GearN_dumpState-NS_HM_old.log
GearN_dumpState-NS_GO.log
GearN_dumpState-NS_GO_old.log
GearN_dumpState-ESIM.log
GearN_dumpState-CS.log
GearN_dumpState-CT.log
GearN_dumpState-SM.log
GearN_dumpState-WF.log
GearN_dumpState-STICKER.log
GearN_dumpState-SEARCH.log
GearN_dumpState-WF_old.log
>>>
有了这个,您可以传递任何类型的文件/目录字符串并检查它是目录还是文件,以及它是否存在。我用它通过 argparse
传递路径参数。
您没有明确说明您知道 pathlib
的存在并且您知道您必须使用它,我省略了如何在 argparse
中使用它并更加努力地展示了它的方便性{ {1}} 是,以及它的一般用法。
正如您现在所说,您确实知道它的存在,以下是它的实际实现方式。
pathlib
import argparse
import pathlib
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("path",nargs="+",type=pathlib.Path)
args = parser.parse_args()
print([path.absolute() for path in args.path])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。