Python从文本文件中搜索和删除项目以及以下两项

时间:2011-12-18 21:09:49

标签: python

我刚开始编程并且正在学习Python。我在搜索和删除文本文件时遇到了一些麻烦。文本文件包含单个间隔名称的列表。我需要让用户输入一个名称,然后从列表中删除以下两个项目。

现在我能够找到并删除搜索到的名称,并将新的list写入文本文件,但我无法弄清楚如何删除下两个项目。我尝试使用list.index来获取搜索到的名称的位置,但它给出了名称中第一个字母的位置。有没有办法可以搜索输入词并获取整个单词('bob','tom','jill') (0,1,2)的位置,并用它来做我需要做的事情?

感谢。

2 个答案:

答案 0 :(得分:1)

假设联系人文件是每个联系人三行,示例文件可能如下所示:

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 :(得分:0)

不是操纵名称的列表字符串,而是操作字符串名称列表会更好。您可以使用string.split轻松将“大字符串”转换为列表:

names_string = 'john robert jimmy'
names_list = names_string.split(' ') # names_list = ['john', 'robert', 'jimmy']

现在,您可以使用基本列表功能轻松添加,删除或搜索此列表中的名称:

names_list.append('michael') # names_list = ['john', 'robert', 'jimmy', 'michael']
names_list.remove('robert') # names_list = ['john', 'jimmy', 'michael']
jimmy_position = names_list.index('jimmy') # jimmy_position = 1

请记住,当元素不在列表中时,处理异常。

要再次将名称列表转换为“大字符串”,您可以使用string.join

names_string = ' '.join(names_list)