使用argparse读取命令行参数时路径间出现换行符问题求助
问题:拼接命令行参数路径时出现换行符导致路径拆分
我使用Python的argparse库读取命令行参数处理文件,拼接文件夹路径与文件名时,两者间被自动添加换行符(\n),导致输出路径被拆分。
原代码
import argparse parser = argparse.ArgumentParser(description='modelling') #Description parser.add_argument('-f', '--filename', type=str, metavar='', required=True, help='data file name') # file reading parser.add_argument('-d', '--foldername', type=str, metavar='', required=True, help='data folder path') # Folder args = parser.parse_args() # reading the arguments if __name__ == '__main__': folder_path = args.foldername file_path = args.filename print("File path: {0}/{1}".format(folder_path, file_path))
执行命令
python test.py -f 'something.txt' -d '/home/Documents/data/processed'
实际输出
File Location:/home/Documents/data/processed /something.txt
期望得到的完整路径:/home/Documents/data/processed/something.txt
解决方法
1. 清理参数中的空白字符
问题大概率是输入参数时不小心混入了换行或空格,直接用.strip()清理参数首尾的空白字符即可:
import argparse parser = argparse.ArgumentParser(description='modelling') parser.add_argument('-f', '--filename', type=str, metavar='', required=True, help='data file name') parser.add_argument('-d', '--foldername', type=str, metavar='', required=True, help='data folder path') args = parser.parse_args() if __name__ == '__main__': folder_path = args.foldername.strip() file_path = args.filename.strip() print("File path: {0}/{1}".format(folder_path, file_path))
2. 使用Python内置工具拼接路径(更推荐)
手动拼接路径容易出问题,推荐用os.path.join()或pathlib,它们会自动处理路径分隔符,同时配合.strip()清理参数:
用os.path.join:
import argparse import os parser = argparse.ArgumentParser(description='modelling') parser.add_argument('-f', '--filename', type=str, metavar='', required=True, help='data file name') parser.add_argument('-d', '--foldername', type=str, metavar='', required=True, help='data folder path') args = parser.parse_args() if __name__ == '__main__': full_path = os.path.join(args.foldername.strip(), args.filename.strip()) print("File path:", full_path)
用pathlib(Python3.4+):
import argparse from pathlib import Path parser = argparse.ArgumentParser(description='modelling') parser.add_argument('-f', '--filename', type=str, metavar='', required=True, help='data file name') parser.add_argument('-d', '--foldername', type=str, metavar='', required=True, help='data folder path') args = parser.parse_args() if __name__ == '__main__': full_path = Path(args.foldername.strip()) / args.filename.strip() print("File path:", full_path)
执行修改后的代码,再运行原命令,就能得到期望的完整路径。
内容的提问来源于stack exchange,提问作者rk___
相关产品推荐
相关产品推荐

