从csv文件导入和导出

2024-04-24 07:15:21 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here,因此我正在尝试创建一个可以搜索数据文件的代码:

  1. 按姓氏检索并显示联系人的详细信息
  2. By date of birth,检索并显示特定月份内所有有生日的联系人。在

以下是我创建的代码:

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()

当我尝试代码时,我一直得到这个结果:

^{pr2}$

我想知道为什么?谁来帮忙?在


Tags: 代码ininputsearchiflinesurnamemyfile
1条回答
网友
1楼 · 发布于 2024-04-24 07:15:21

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

找到名称后,请退出循环,并将else套件用于for循环:

for line in Myfile:
    if ',' + str(surname) + ',' in line:
        print(line)
        break
else:
    print('No contacts found')

只有在耗尽iterable的情况下,for循环上的else才会执行,因此,当您使用了not时,会提前中断循环。在

您的姓氏是该行的第一个值,因此您最好测试一下该行是否以姓氏开头:

^{pr2}$

专业提示:读取CSV文件时,请使用^{} module

import csv

with open('Address book.csv', newline='') as myfile:
    reader = csv.reader(myfile)
    for row in reader:
        if row[0] == surname:
            print(row)
            break
    else:
         print('No contacts found')

相关问题 更多 >