首页 > 解决方案 > 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 行上的用户输入。它会过滤掉,并为我提供该特定数据的完整信息。如果整体代码没有太大差异,将不胜感激。非常感谢!!:)

标签: pythondictionary

解决方案


首先,由于您没有更多地参与开发/您不必使用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,我很乐意提供帮助!


推荐阅读