1

私は自分自身にPythonを教えており、テキストファイルを検索する方法を学びたいと思っていました。たとえば、フルネームとアドレスの長いリストがあり、名を入力して、その名前に対応する詳細を印刷できるようにしたいとします。これについて行くための最良の方法は何でしょうか?ありがとう!

私が持っているデータは、次のような列の.txtファイルにあります。

Doe, John        London
Doe, Jane        Paris
4

4 に答える 4

1

私はsplitコマンドを賢明に使用します。もちろん、ファイルがどのように区切られているかによって異なりますが、例では、データ フィールドを分割する文字がスペースであることを示しています。

ファイルの各行に対して、次のようにします。

last, first, city = [data.strip(',') for data in line.split(' ') if data]

そして、それらの属性に基づいて比較を実行します。

明らかに、データ フィールドにスペースが含まれている場合、これは壊れます。そのため、このような単純なアプローチを取る前に、そうでないことを確認してください。

于 2012-12-12T22:45:25.307 に答える
1

データ形式を設計した場合、固定幅の列はあまり適していません。しかし、それらに行き詰まっている場合は、簡単に対処できます。

まず、データを解析します。

addressbook = []
with open('addressbook.txt', 'r') as f:
    for line in f:
        name, city = line[:17], line[17:]
        last, first = name.split(',')
        addressbook.append((first, last, city))

しかし今、あなたは名前で検索できるようにしたいと考えています。あなたはそれを行うことができますが、巨大なアドレス帳では遅くなる可能性があり、コードはあまり直接的ではありません:

def printDetails(addressbook, firstname):
    for (first, last, city) in addressbook:
        if first == firstname:
            print fist, last, city

タプルのリストだけでなく、辞書を使用して、名を他のフィールドにマッピングしたらどうなるでしょうか?

addressbook = {}
with open('addressbook.txt', 'r') as f:
    for line in f:
        name, city = line[:17], line[17:]
        last, first = name.split(',')
        addressbook[first]=((last, city))

しかし、それは良くありません。新しい "John" ごとに、以前の "John" が消去されます。したがって、私たちが本当に必要としているのは、名をタプルのリストにマッピングする辞書です。

addressbook = collections.defaultdict(list)

with open('addressbook.txt', 'r') as f:
    for line in f:
        name, city = line[:17], line[17:]
        last, first = name.split(',')
        addressbook[first].append((last, city))

ここで、その名の詳細を確認したい場合:

def printDetails(addressbook, firstname):
    for (last, city) in addressbook[firstname]:
        print firstname, last, city

どちらの方法でも、これを改善する明らかな場所がいくつかあります。たとえば、一部のフィールドの先頭または末尾に余分なスペースがあることに気付く場合があります。どうすればそれらを取り除くことができますか? "Joe"を呼び出しprintDetailsても "Joe" がいない場合は、何も得られません。素敵なエラーメッセージの方がいいかもしれません。ただし、基本が機能するようになったら、後でいつでも追加できます。

于 2012-12-12T22:44:54.123 に答える
0

Python でテキスト ファイルを読み取るには、次のようにします。

f = open('yourtextfile.txt')
for line in f:
    //The for-loop will loop thru the whole file line by line
    //Now you can do what you want to the line, in your example
    //You want to extract the first and last name and the city
于 2012-12-12T22:45:45.900 に答える
0

次のような簡単なことを行うことができます。

name = raw_input('Type in a first name: ')  # name to search for

with open('x.txt', 'r') as f:  # 'r' means we only intend to read
    for s in f:
        if s.split()[1] == name:  # s.split()[1] will return the first name
            print s
            break  # end the loop once we've found a match
    else:
        print 'Name not found.'  # this will be executed if no match is found
名を入力してください: Jane
ドウ、ジェーン・パリス

関連文書

于 2012-12-12T22:43:15.760 に答える