【问题标题】:Split a file by commas [closed]用逗号分割文件[关闭]
【发布时间】:2017-05-26 08:57:21
【问题描述】:

我有一个 python 任务需要我执行以下操作,

*创建一个程序来:*

  1. 按姓氏搜索此数据文件以检索并显示联系人的详细信息
  2. 按出生日期 (dd/mm/yyyy) 搜索此数据文件,以检索并显示特定月份生日的所有联系人
  3. 在文件中添加新的人员详细信息

    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

【问题讨论】:

  • 请按照实际情况格式化您的代码,缩进在 Python 中非常重要,更重要的是您的实际问题是什么?具体是什么不起作用...同样,对于您的提取,请将其格式化为它的显示方式。
  • 我在笔记本电脑上,我最近醒来时有点颤抖,触摸板有点敏感,它的格式与我的方式一致,我坚持让它拥有整个文本文件由“,”分割,然后我需要获取,以便我可以在文件中找到它,并将人员数据添加到文件中。我不需要完全完成只需要一些指导,除非你想完全完成它继续我不能阻止你这样做
  • 所以你的代码在第一次之后没有缩进?
  • 您可以检查 len(textfile) 以确保它至少有 5 个元素。如果没有,您应该阅读split 函数的文档(textfile.split(",") 可能是您要查找的内容)。
  • 好的。你能修复你的缩进吗(在第一个 While 它应该缩进之后)。并提供 6 行代码,以便我们可以完整地运行您的代码?

标签: python list file split


【解决方案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

【讨论】:

  • 嘿,非常感谢它有效!!,在得到帮助后我要做的下一件事是尝试找出如何更改这件作品以使其搜索出生日期和那么如何将某人添加到文件中!先生,你是救命稻草
  • 对于日期,一种简单的方法是使用嵌套的ifs,您首先在其中存储日期:date = line.split(',')[6],然后再次使用 split 来确定月份是否与用户输入的月份匹配:month = date.split('/')[1].
  • 我所做的是使用你的代码并修改它来给我日期,我似乎无法让它工作我等了 24 小时,直到我再次询问我是否可以解决它我自己,
  • @ChristopherAllum 我会看看我能做什么:)
【解决方案2】:

为了分割一个字符串,只需使用

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']

every >> 是在控制台中执行的一行。

为了添加详细信息,请将它们添加到您的 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

现在您可以判断哪个条目与该值匹配。

【讨论】:

  • 在代码行中如何以及在何处实现,我的 IT 老师并没有真正教过我很多东西,他只是给了我它并告诉我继续努力。其中大部分对我来说都是陌生的。而且我的老师也很严格,如果不符合他的标准,他也会制裁我
  • @ChristopherAllum 更好?
  • 谢谢 :) 这帮助我理解了
猜你喜欢
  • 2019-03-31
  • 2021-08-23
  • 1970-01-01
  • 2023-03-27
  • 2022-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
相关资源
最近更新 更多