我刚开始编程并且正在学习Python。我在搜索和删除文本文件时遇到了一些麻烦。文本文件包含单个间隔名称的列表。我需要让用户输入一个名称,然后从列表中删除以下两个项目。
现在我能够找到并删除搜索到的名称,并将新的list
写入文本文件,但我无法弄清楚如何删除下两个项目。我尝试使用list.index
来获取搜索到的名称的位置,但它给出了名称中第一个字母的位置。有没有办法可以搜索输入词并获取整个单词('bob','tom','jill') (0,1,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)