Python 从csv文件导入和导出

Python 从csv文件导入和导出,python,csv,python-3.x,Python,Csv,Python 3.x,因此,我尝试创建一个可以搜索数据文件的代码: 按姓氏检索并显示联系人的详细信息 按出生日期检索并显示特定月份内生日的所有联系人 以下是我创建的代码: def search(): option = input('Please select to search by \n1. Surname\n2. D.O.B\n') if option == '1': surname = input('Please enter surname: ') while n

因此,我尝试创建一个可以搜索数据文件的代码:

  • 按姓氏检索并显示联系人的详细信息
  • 按出生日期检索并显示特定月份内生日的所有联系人
  • 以下是我创建的代码:

    def search():
        option = input('Please select to search by \n1. Surname\n2. D.O.B\n')
        if option == '1':
            surname = input('Please enter surname: ')
            while not surname.isalpha():
                surname = str(input('Please enter a valid surname: '))
            Myfile = open('Address book.csv', 'rt')
            for line in Myfile:
                if ',' + str(surname) + ',' in line:
                    print(line)
                else:
                     print('No contacts found')
        elif option == '2':
            Validmonth = False
            while Validmonth == False:
                month = input('Please enter the birth month')
                if month >='13' and month <='0':
                    print('Please enter a valid month')
                else:
                    Validmonth = True
                Myfile = open ('Address book.csv', 'rt')
                for line in Myfile:
                    if str(month) in line:
                        print(line)
                    else:
                        print('No contacts found')
        else:
            print('Error, select a valid option')
            search()
    
    search()
    

    我想知道为什么?有人请帮忙吗?

    您测试每一行的姓氏,然后为不匹配的每一行打印
    未找到联系人

    找到名称时中断循环,并使用
    else
    套件执行
    for
    循环:

    for line in Myfile:
        if ',' + str(surname) + ',' in line:
            print(line)
            break
    else:
        print('No contacts found')
    
    else
    for
    循环中,只有当您耗尽了iterable时才会执行,因此当您没有提前中断循环时

    您的姓氏是行中的第一个值,因此如果行以姓氏开头,您最好进行测试:

    if line.startswith(surname + ','):
    
    专业提示:读取CSV文件时,请使用:


    您在每一行上测试姓氏,然后为不匹配的每一行打印
    No contacts found

    找到名称时中断循环,并使用
    else
    套件执行
    for
    循环:

    for line in Myfile:
        if ',' + str(surname) + ',' in line:
            print(line)
            break
    else:
        print('No contacts found')
    
    else
    for
    循环中,只有当您耗尽了iterable时才会执行,因此当您没有提前中断循环时

    您的姓氏是行中的第一个值,因此如果行以姓氏开头,您最好进行测试:

    if line.startswith(surname + ','):
    
    专业提示:读取CSV文件时,请使用:


    谢谢你能再帮我一件事吗?如果在这个问题的范围内,当然可以。如果是一个全新的问题,发布一个新问题(在堆栈溢出上搜索答案后)。不,是同一个问题。使用上面的代码,我的代码根本无法运行。我一直收到相同的回复“未找到联系人”。@ConfusedChild24:您是否100%确定文件中的一行出现了文本
    ,Vickers,
    ?您没有发布CSV文件的示例,因此我无法为您验证。我现在已添加了我在问题中使用的数据。我肯定它在那里。谢谢!你能再帮我一件事吗?如果在这个问题的范围内,当然可以。如果是一个全新的问题,发布一个新问题(在堆栈溢出上搜索答案后)。不,是同一个问题。使用上面的代码,我的代码根本无法运行。我一直收到相同的回复“未找到联系人”。@ConfusedChild24:您是否100%确定文件中的一行出现了文本
    ,Vickers,
    ?您没有发布CSV文件的示例,因此我无法为您验证。我现在已添加了我在问题中使用的数据。我肯定它在那里。我希望照片上的证件是假的。。。如果不是的话,也许你最好把它们弄糊涂。你能不能别把你的问题给毁了?通过删除批量,您可以删除所有上下文,以便人们评估他们是否有相同的问题,以及我的答案是否也能帮助他们。我希望图片中的凭据是假的。。。如果不是的话,也许你最好把它们弄糊涂。你能不能别把你的问题给毁了?通过删除批量,您可以删除所有上下文,以便人们评估他们是否有相同的问题,以及我的答案是否也能帮助他们。