python - Python:参数解析以获取所需信息
问题描述
这里是 Python 的新手。所以我试图弄清楚如何使用参数解析,以使人们使用更加命令行友好。我有一个文本文件(student.txt):
Name : Brandon
Age : 16
Gender : Male
Name : Alex
Age : 18
Gender : Male
Name : Calvin
Age : 17
Gender : Male
Name : Sarah
Age : 19
Gender : Female
Name : Ellie
Age : 15
Gender : Female
Name : Sam
Age : 19
Gender : Female
我已经完成的代码(不知道如何去做):
import argparse
parser = argparse.ArgumentParser(description='Script to parse')
parser.add_argument('--filter',
help='Filter')
parser.add_argument('--file',
help='Name of the file')
args = parser.parse_args()
with open ('args.file','r') as readfile:
flag=False
student={}
temp={}
student_lst = 'Name,Age,Gender'.split(',')
for line in readfile.readlines():
if flag:
key,value = line.split (':')
temp[key.strip()]=value.strip()
if 'Gender' in line:
student[temp['Name']] = temp
temp = {}
if 'Name' in line:
temp['Name']=line.split(':')[1].strip()
if args.filter in student_lst or not args.filter:
flag = True
else:
flag = False
预期输出,过滤器是特定的:
exercise.py --file student.txt --filter_Gender Female --filter_Age 19
会给我:
{'Sarah': {'Age': '19', 'Gender': 'Female', 'Name': 'Sarah'},
'Sam': {'Age': '19', 'Gender': 'Female', 'Name': 'Sam'}}
如果 cmd 行是:
exercise.py --file student.txt
会给我所有学生的字典数据。
基本上,基于使用 argparse 在 cmd 行上的用户输入。它会过滤掉,并为我提供该特定数据的完整信息。如果整体代码没有太大差异,将不胜感激。非常感谢!!:)
解决方案
首先,由于您没有更多地参与开发/您不必使用argparse,我强烈建议您查看 Click 库。它的工作与 argparse 相同,只是使用起来更容易、更直观。
其次,我建议将学生项目存储在.json
文件中。这使得读取和写入变得非常容易,因为 JSON 文件具有与 Python 字典相同的结构。所以你的结构可能看起来像:
student_dict = {'students':
[{'name': 'Brandon', 'age': 16}]
}
让所有学生:
for student in student_dict['students']:
print(student)
按姓名过滤学生也很简单,例如:
for student in student_dict['students']:
if student['name'] == 'Jessica':
print('This is Jessica')
我对 argparse 没有太多经验,但如果您切换到 Click,我很乐意提供帮助!
推荐阅读
- mysql - 在查询执行期间丢失连接
- zip - 密码保护bash中的压缩目录
- r - 在每个 ID 有多个观察值的 df 中,如何根据另一个变量有条件地查找日期?
- java - 在 com.example.accountproject.models.interfaces.MemberSv 定义中创建名称为“memberSv”的 bean 时出错
- dependency-injection - 如何使用匕首提供列表适配器类的依赖关系?- 当适配器类将接口作为参数时
- react-native - 如何在 .map 循环笑话测试库中覆盖 onPress 的 touchableOpacity
- javascript - 如何使用 javascript 从内部更改父 iframe 大小?
- javascript - 如何在 javascript 中访问多个嵌套的子对象?
- laravel - 引导模式上的 laravel 文件管理器
- react-native - 如何在 React Native 中创建调试 apk 文件