0

abc.txt次のデータを含むという名前のファイルがあるとします。私は初心者です。だから助けてください

Nathan  Johnson 23 M
Mary    Kom     28 F
John    Keyman  32 M
Edward  Stella  35 M

fnamelnameagegenderはインデックスが関連付けられていますか?? 私の要件は、ユーザーが名前で検索条件を選択した場合、名前の列のみを検索するか、検索条件を性別として選択する必要があるため、性別で検索してレコード全体を表示する必要があるためです。さらにどうすればよいですか?

#!usr/bin/python
import sys
class Person:

    def __init__(self, firstname=None, lastname=None, age=None, gender=None):
        self.fname = firstname
        self.lname = lastname
        self.age = age
        self.gender = gender



    def display(self):
        found = False

        n1 = raw_input("Enter for Search Criteria\n1.FirstName ==  2.LastName ==     3.Age == 4.Gender : " )

        print "Not a valid input"
        if n1.isdigit():
            n = int(n1)
        else:
            print "Enter Integer only" 

        if n == 0 or n>4:
            print "Enter valid search "

        if n == 1:
            StringSearch = raw_input("Enter FirstName :")
            for records in list_of_records:
                if StringSearch in records.fname:
                    found = True
                    print records.fname, records.lname, records.age, records.gender

            if not found:
                print "No matched record"

        if n == 2:
            StringSearch = raw_input("Enter LastName :")
            for records in list_of_records:
                if StringSearch in records.lname:
                    found = True
                    print records.fname, records.lname, records.age, records.gender

            if not found:
                print "No matched record"

        if n == 3:
            StringSearch = raw_input("Enter Age :")
            for records in list_of_records:
                if StringSearch in records.age:


        if not found:
            print "No matched record"

        if n == 4:
            StringSearch = raw_input("Enter Gender(M/F) :")
            for records in list_of_records:
                if StringSearch in records.gender:
                    found = True
                    print records.fname, records.lname, records.age, records.gender

            if not found:
            print "No matched record"



f= open("abc","r")
list_of_records = [Person(*line.split()) for line in f]
#for record in list_of_records:


for per in list_of_records:
    per.display()
4

2 に答える 2

1

特定の情報を検索したい場合は、このようなことができます。たとえば、ユーザーが を検索したいとしfirstnameますJohn。これはあなたがそれを行う方法です:

#!usr/bin/python
import sys
class Records:
    def __init__(self, firstname, lastname, age, gender):
        self.fname = firstname
        self.lname = lastname
        self.age = age
        self.gender = gender

f= open("abc","r")
list_of_records = [Records(*line.split()) for line in f]
search_term = "John"
for record in list_of_records:
    if record.firstname == search_term:
        print "We found him!"
        print record.firstname, record.lastname, record.age, record.gender

ユーザーが afirstnameと a の両方を指定した場合、次のgenderようなことができます。

for record in list_of_records:
    if record.firstname == "John" and record.gender = "M":
        print "We found him!"
        print record.firstname, record.lastname, record.age, record.gender

また、常にファイル ストリームを閉じることを忘れないでください。つまり、 を呼び出すとopen、実際にはファイル ストリームが開いていることになります。そのため、スクリプトの最後では、常にファイル ストリームを閉じますf.close()。を使用すればwith、閉じることを心配する必要はありません。

于 2013-10-21T09:26:20.307 に答える
0

For a more compact and flexible solution, you can use the namedtuple type from the standard library:

import collections

record_tuple = collections.namedtuple('Record',
                      ['Firstname', 'Lastname', 'Age', 'Gender'])

n = raw_input("Enter %s :" % ' '.join('%s.%s' % (i, name) for i, name in enumerate(record_tuple._fields, 1)))
n = int(n)

StringSearch = raw_input('Enter %s :' % record_tuple._fields[n-1])

for line in open('abc'):
    record = record_tuple(*line.split())
    if record[n-1] == StringSearch:
        print ' '.join(record)

This way, you can generalize the search code.

于 2013-10-21T10:30:10.023 に答える