我有一个python任务,需要我做以下事情,
*创建一个程序:*
将新人详细信息添加到文件
file = open ("c:\ABOOK.txt", "r")
myfile = (file.readline())
mywordlist = myfile.split()
mylength= len(mywordlist)# reads how long it is
print(mylength)
count = 0 # counts
afound = 0 # counts
s_name = input("Enter a surname to be found:")
textfile=(file.readlines())
print(textfile[0])
mwl = textfile[0].split(",")
mwl1 = textfile[1].split(",")
mwl2 = textfile[2].split(",")
mwl3 = textfile[3].split(",")
mwl4 = textfile[4].split(",")
while(count<len(textfile)):
print(textfile[count])
count = count + 1
print(mwl,mwl1,mwl2,mwl3,mwl4)
print(textfile.split(","))
文件被“,”打破了,这是记事本的摘录;它的六条线长。
Jackson,Samantha,2 Heather Row,Basingstoke,RG21 3SD,01256
135434,23/04/1973,sam.jackson@hotmail.com
Vickers,Jonathan,18 Saville Gardens,Reading,RG3 5FH,01196
678254,04/02/1965,the_man@btinternet.com
Morris,Sally,The Old Lodge, Hook,RG23 5RD,01256
728443,19/02/1975,smorris@fgh.co.uk
Cobbly,Harry,345 The High Street,Guildford,GU2 4KJ,01458
288763,30/03/1960,harry.cobbly@somewhere.org.uk
Khan,Jasmine,36 Hever Avenue,Edenbridge,TN34 4FG,01569
276524,28/02/1980,jas.khan@hotmail.com
Vickers,Harriet,45 Sage Gardens,Brighton,BN3 2FG,01675
662554,04/04/1968,harriet.vickers@btinternet.com
答案 0 :(得分:1)
以下是程序前两部分的基本解决方案,您可以对此进行大量改进,例如不对文件名进行硬编码,对新行字符进行条带化处理等。(如果您使用了这个确切的代码就会出现问题)不会得到100%)但我会把它作为一项任务给你:
import sys
def find_record_by_surname(input_surname):
found = False
with open("ABOOK.txt", "r") as f:
for line in f:
surname = line.split(',')[0]
if surname == input_surname.title():
found = True
return found
def return_details_by_surname(input_surname):
details = []
with open("ABOOK.txt", "r") as f:
for line in f:
details = line.split(',')
if details[0] == input_surname.title():
break
return details
def find_record_by_month_of_birth(input_month):
if len(input_month) != 2:
input_month = "0" + input_month
found = False
with open("ABOOK.txt", "r") as f:
for line in f:
month = line.split(',')[6].split('/')[1]
if input_month == month:
found = True
break
return found
def return_details_by_month_of_birth(input_month):
if len(input_month) != 2:
input_month = "0" + input_month
details = ""
with open("ABOOK.txt", "r") as f:
for line in f:
if line.split(',')[6].split('/')[1] == input_month:
details = details + line
return details
if __name__ == "__main__":
print("Menu Choices")
print("============")
print("1: Search contacts by surname")
print("2: Search contacts by month of birth")
print("3: Add a new contact to ABOOK.txt")
print("4: Exit")
choice = input("Enter your choice: ")
while choice != "4":
if choice == "1":
input_surname = input("Enter a surname you would like the records for from ABOOK.txt? ")
if find_record_by_surname(input_surname):
print("The record with the entered surname was found in ABOOK.txt")
print("The details for that contact are:")
print(return_details_by_surname(input_surname))
else:
print("The record with the entered surname was not found in ABOOK.txt")
if choice == "2":
input_month = input("Enter the month of birth (1-12) you would like the records for from ABOOK.txt? ")
if find_record_by_month_of_birth(input_month):
print("The details for the contact(s) with the entered month of birth are: ")
print(return_details_by_month_of_birth(input_month))
else:
print("No record with the entered month of birth was found in ABOOK.txt")
if choice == "3":
# TO-DO code for adding a new contact
print()
print("Menu Choices")
print("============")
print("1: Search contacts by surname")
print("2: Search contacts by month of birth")
print("3: Add a new contact to ABOOK.txt")
print("4: Exit")
choice = input("Enter your choice: ")
print("Goodbye!")
sys.exit(0)
使用的ABOOK.txt文件:
Jackson,Samantha,2 Heather Row,Basingstoke,RG21 3SD,01256135434,23/04/1973,sam.jackson@hotmail.com
Vickers,Jonathan,18 Saville Gardens,Reading,RG3 5FH,01196678254,04/02/1965,the_man@btinternet.com
Morris,Sally,The Old Lodge, Hook,RG23 5RD,01256728443,19/02/1975,smorris@fgh.co.uk
Cobbly,Harry,345 The High Street,Guildford,GU2 4KJ,01458288763,30/03/1960,harry.cobbly@somewhere.org.uk
Khan,Jasmine,36 Hever Avenue,Edenbridge,TN34 4FG,01569276524,28/02/1980,jas.khan@hotmail.com
Vickers,Harriet,45 Sage Gardens,Brighton,BN3 2FG,01675662554,04/04/1968,harriet.vickers@btinternet.com
答案 1 :(得分:0)
要分割字符串,请使用
detail_arr = string.split(',')
detail_arr现在将是一个包含所有不同行的数组。
以下是代码中的示例:
>> str = "Jackson,Samantha,2 Heather Row,Basingstoke,RG21 3SD,01256135434,23/04/1973,sam.jackson@hotmail.com"
>> str.split(',')
['Jackson', 'Samantha', '2 Heather Row', 'Basingstoke', 'RG21 3SD', '01256135434', '23/04/1973', 'sam.jackson@hotmail.com']
每个&gt;&gt;是在控制台中执行的一行。
为了添加细节,请将它们添加到您的arr中,然后执行:
str = ''.join(map(lambda x: x + ',', details_arr))[:-1]
Str现在将用逗号分隔你的所有数组,你可以把它写到你的文件中。
在你的代码中,你不想像第3行那样用空格分割数据,而是用逗号分隔。
你也有一段时间没有退出条款,所以你会陷入无限循环。
您的代码应如下所示:
file = open ("c:\ABOOK.txt", "r")
data = file.read()
data_rows = data.split(',') //every 8th row it will start a new entry (7,15,23...)
现在,按姓氏搜索将在第0,7,15行搜索... 按生日进行搜索将在第6,14,22行进行搜索。 你可以计算出所有的行。您可以创建一个计数器来查看您正在查看的联系人:
c = 0 //counter of entry
for i in xrange(len(data_rows)/8):
if data_rows[i+row_number] == val: // row_number depends on what youre trying to match
print ''.join(data_rows[c:c+8])
c += 1
现在您可以判断哪个条目符合该值。