Поиск ошибки повторения файла CSV
Я ищу файл CSV, используя месяц в дате:
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
Есть несколько проблем, таких как; не отображает всех релевантных людей, при повторной попытке это не работает и выдает ошибку:
1. Surname
2. D.O.B
3. Quit
Please select an option: 2
Please enter the birth month in a two digit format e.g. 02: 12
Month not found.
Please enter the birth month in a two digit format e.g. 02: 02
Month not found.
Please enter the birth month in a two digit format e.g. 02: 02
Month not found.
Please enter the birth month in a two digit format e.g. 02: 03
Month not found.
Please enter the birth month in a two digit format e.g. 02: 12
Month not found.
Please enter the birth month in a two digit format e.g. 02: 01
Month not found.
Please enter the birth month in a two digit format e.g. 02:
Must be a number
Please enter the birth month in a two digit format e.g. 02: 04
Month not found.
Please enter the birth month in a two digit format e.g. 02: 50
Must be 1-12
Please enter the birth month in a two digit format e.g. 02:
Вот код:
def input_month():
addrsBk
while True:
try:
month = int(input("Please enter the birth month in a two digit format e.g. 02: "))
except ValueError:
print("Must be a number")
else:
if month in range(1, 13):
return month
print("Must be 1-12")
def DOB_search(BkRdr):
addrsBk
while True:
search_month = input_month()
addrsBk
for row in BkRdr:
DOB = row[6]
day,month,year = DOB.split("/")
if search_month == int(month):
surname = row[0]
firstname = row[1]
print(firstname, " ",surname)
return"".join((firstname, surname))
addrsBk.close
print("Month not found.")
1 ответ
Ну, проблема в том, что в первый раз for row in BkRdr:
выполняется, файл исчерпан, указатель - EOF (конец файла) и больше нет строк для чтения. Затем во второй раз он проходит через for row in BkRdr:
больше блоков не выполняется.
Чтобы решить эту проблему, вы должны взять указатель файла на начало файла с .seek(0)
дань.
Если вы открыли файл CSV, как это:
myFile = open('file_01.csv', mode='r')
BkRdr = csv.reader(myFile, delimiter=',')
Вы можете исправить свой код с помощью:
for row in BkRdr:
DOB = row[6]
day,month,year = DOB.split("/")
if search_month == int(month):
surname = row[0]
firstname = row[1]
print(firstname, " ",surname)
return"".join((firstname, surname))
addrsBk.close
print("Month not found.")
myFile.seek(0)
<file>.seek(int)
поместите указатель строки файла в положение int
номер, в данном случае к началу файла (BOF).
В любом случае, это не проблема файла CSV, это объект файла. Вы можете прочитать это: