Pythonテキストファイルから項目と次の2つを検索して削除する

私はプログラミングを始め、Pythonを学んでいます。テキストファイルを検索したり削除したりする際にいくつかの問題があります。テキストファイルには、スペースで区切られた単一の名前のリストが含まれています。私は、ユーザーに名前を入力させ、それに次の2つの項目をリストから削除させる必要があります。

現在、検索された名前を見つけて削除し、新しい list をテキストファイルに書き込むことはできますが、次の2つの項目を削除する方法はわかりません。検索した名前の位置を取得するために list.index を使用しようとしましたが、名前の最初の文字の位置が返されます。入力単語を検索して( 'bob'、 'tom'、 'jill')(0,1,2)という単語全体の位置を取得し、私は何をする必要がありますか?

ありがとう。

0
スタックオーバーフローへようこそ。コミュニティがあなたを援助できるように、入力ファイルからの抜粋だけでなく、いくつかのコード例を提供してください。
追加された 著者 Tim McNamara,
テキストファイルに連絡先が含まれています。 Superman 5556874 Metropolis Batman 5556987 Gothamこれは、開いた後、内容を読んで、ファイルを閉じた後です。 x = str(raw_input( '削除する連絡先の名前を入力:'))try:f = mylist:mylist.remove(mylistの場合はmylist = line.split())私はmylistの中でxを試してみました:私はmylistの中でxならばしようとしました:mylist [i] + '\ n' f.write(s) mylist.index(x)しかし、バットマンの検索は3の代わりに25を返します。
追加された 著者 SJC,

2 答え

連絡先ファイルが連絡先ごとに3行あるとすると、サンプルファイルは次のようになります。

Fred
58993884
AnyTown
Mary
61963888
SomeCity
Bill
78493883
OtherTown
Anne
58273854
AnyCity

スクリプト:

x = raw_input('Enter Name of Contact to Delete: ')

# do a case-insensitive match for names
target = x.strip().lower()

# create a list of all valid contacts
skip = False
contacts = []
with open('contacts.txt', 'r') as stream:
    for index, line in enumerate(stream):
        # check every third line
        if not index % 3:
            skip = (line.strip().lower() == target)
            if skip:
                print 'Removed Contact:', line
        if not skip:
            contacts.append(line)

# re-open the contacts file for writing
with open('contacts.txt', 'w') as stream:
    stream.write(''.join(contacts))

出力:

$ python2 /home/baz/code/misc/test.py
Enter Name of Contact to Delete: Mary
Removed Contact: Mary

$ cat contacts.txt 
Fred
58993884
AnyTown
Bill
78493883
OtherTown
Anne
58273854
AnyCity
1
追加された
@SJC。あなたの新しい仕様に合わせて私の答えを更新しました。それでも連絡先ファイルの構造と一致しない場合は、完全なスペックで質問を修正してください。
追加された 著者 ekhumoro,
ありがとう。私のファイルは連絡先ごとに3行です。
追加された 著者 SJC,
0
追加された
ありがとう。それは私がそれを一人で試すときに機能します。私はこれまでにしていたものとうまくやっていくのが難しいです。私が分割を変更した場合、私はすでに回答を得ていませんでした。リストを再び新しいリストに分割しようとすると、「AttributeError: 'list'オブジェクトに属性 'split'がありません。 x = str(raw_input( '削除する連絡先の名前を入力してください'))try:f = mylist = line.split( '')mylist:y = mylist.index(x)
追加された 著者 SJC,