tuple-python的字符串参数

tuple-python的字符串参数,python,tuples,Python,Tuples,我打开了一个文本文件并打印出来。我试图允许用户按以下顺序输入要打印的行的详细信息(名字或部门名称“CSEE”): Timothy, Johnson 12345 Law £25000 这是我目前掌握的代码 fob=open('c:/Users/username/Desktop/CE151 Python/ass2/info.txt','r') print("enter student file name: )") text_file = open("info.txt","r"

我打开了一个文本文件并打印出来。我试图允许用户按以下顺序输入要打印的行的详细信息(名字或部门名称“CSEE”):

 Timothy, Johnson      12345 Law      £25000
这是我目前掌握的代码

fob=open('c:/Users/username/Desktop/CE151 Python/ass2/info.txt','r')
print("enter student file name: )")
text_file = open("info.txt","r")
for item in fob:
    for y in item:
        item.split(' ')
        print(item)
        break
find = input('Input Details: ')
for find in item:
    print(find)
info.txt文件包含:

12345 Law 35000 Bob Liam
12346 Biology 25000 Tom Hanks
12350 Economics 30000 Billy Kid
13123 Economics 55000 Finn Balor
13124 Maths 40000 David Young
13126 Physics 25000 John Wayne Smith
13127 History 35000 Tony Gregg
13128 History 27500 Lily Joe
13129 Chemistry 25000 Saxton Crown
13130 Law 22000 jimmy Arrow

我希望用户输入信息,例如,如果用户输入历史,那么所有研究历史的人都将被打印出来。看起来你的任务非常简单,只需打开一个文件,然后每行读取一些空格分隔的数据,然后重新排列。这可以在Python中非常简洁地完成。我不太清楚为什么您有这么多的
输入
s,如果您希望用户能够以交互方式输入文件名,我认为您最多需要一个。这是我的密码:

#open the file
with open("input.txt") as student_file:
    #for each line
    for line in student_file:
        #read some space separated data and rearrange it
        print("{3}, {4}\t{0}\t{1}\t£{2}".format(*line.split()))
如果
input.txt
有您的输入,这将导致输出

Bob, Liam   12345   Law £35000
Tom, Hanks  12346   Biology £25000
Billy, Kid  12350   Economics   £30000
Finn, Balor 13123   Economics   £55000
David, Young    13124   Maths   £40000
John, Wayne 13126   Physics £25000
Tony, Gregg 13127   History £35000
Lily, Joe   13128   History £27500
Saxton, Crown   13129   Chemistry   £25000
jimmy, Arrow    13130   Law £22000
这个输出是用制表符分隔的,看起来很接近您想要的。如果希望再次将其分隔为空格,可以用空格替换
\t
s。如果希望它是空间分隔的,但仍然对齐,这可能需要更多的工作

更新代码以满足您的新需求,我认为:

target_course = input("which course should be filtered by? ")
with open("input.txt") as student_file:
    for line in student_file:
        data = line.split()
        if data[1] == target_course:
            print("{3}, {4}\t{0}\t{1}\t£{2}".format(*data))
正在运行的it示例:

which course should be filtered by? History
Tony, Gregg 13127   History £35000
Lily, Joe   13128   History £27500
如果这个想法是让他们根据自己喜欢的领域进行过滤,那么这可能会变得更复杂一些。我会使用一个名为tuple的
,并对此进行检查。这可以按如下方式完成:

from collections import namedtuple

fields = ["forename", "surname", "id", "subject", "cost"]

Row = namedtuple("Row", fields)

target_field = input("what field do you want to filter by (one of {})? ".format(fields))
target_value = input("what value do you want to filter by? ")

with open("input.txt") as student_file:
    for line in student_file:
        id_, subject, cost, forename, *surname = line.split()
        data = Row(id=id_, subject=subject, cost=cost, forename=forename, surname=" ".join(surname))
        if getattr(data, target_field) == target_value:
            print("{0.surname}, {0.forename}\t{0.id}\t{0.subject}\t£{0.cost}".format(data))
随着重构的进行,代码可能会变得更加清晰。请注意,我已经修复了一个我之前意识到的bug——它无法处理多个单词的姓氏。令人尴尬的是,多个字的姓氏及其处理方式非常贴近我的内心。它现在的工作原理如下:

what field do you want to filter by (one of ['forename', 'surname', 'id', 'subject', 'cost'])? subject
what value do you want to filter by? History
Gregg, Tony 13127   History £35000
Joe, Lily   13128   History £27500

what field do you want to filter by (one of ['forename', 'surname', 'id', 'subject', 'cost'])? cost
what value do you want to filter by? 25000
Hanks, Tom  12346   Biology £25000
Wayne Smith, John   13126   Physics £25000
Crown, Saxton   13129   Chemistry   £25000

请注意,它还不是非常复杂-例如,它不进行任何输入验证,
cost
作为一个整数给出,而不是以%作为前缀。这是您可以尝试添加到程序中的内容。

那么您被困在哪里了?嘿,谢谢,但这不是我想要做的,我实际上希望用户输入信息,例如,如果用户输入历史,那么所有学习历史的人都将被打印出来。我看到-输入将始终对应于一个主题?