Выдает ошибку : TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Дан файл, содержащий различные даты. Каждая дата — это число месяц и год. Найти год с наименьшим номером.
import csv
d =[]
with open(r'C:\\Users\\79654\\Desktop\\История\\2laba8.txt','r+',encoding='cp1251') as f:
reader = csv.DictReader(f, delimiter = ",")
for row in reader:
d.append(row)
min_year = int(row.get("год"))
for i in d:
if min_year >= int(i.get("год")):
min_year = int(i.get("год"))
print(f"Наименьший год {min_year}")
print("Весна")
for i in d:
if (int(i.get("месяц")) > 2) and (int(i.get("месяц")) < 6):
print(i)
Traceback (most recent call last):
File "D:\pythonProject1\test.py", line 8, in <module>
min_year = int(row.get("год"))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Файл:
день,месяц,год
12,12,2020
11,04,2019
15,05,1998
20,07,2016
10,01,1988
20,01,2001
01,01,1967
01,05,1999
Ответы (2 шт):
Автор решения: Master's Time
→ Ссылка
Ошибка в том что cp1251 не читает числа как 2230, 4023, и так далее. Поэтому лучше использовать utf-8. Когда cp1251 не принимает числа то он просто отправляет None так как он не видит такие числа
import csv
d =[]
with open(r'text.txt','r+',encoding='utf-8') as f:
reader = csv.DictReader(f, delimiter = ",")
for row in reader:
d.append(row)
min_year = int(row.get("год"))
for i in d:
if min_year >= int(i.get("год")):
min_year = int(i.get("год"))
print(f"Наименьший год {min_year}")
print("Весна")
for i in d:
if (int(i.get("месяц")) > 2) and (int(i.get("месяц")) < 6):
print(i)
Автор решения: CrazyElf
→ Ссылка
Возьмите библиотеку Pandas и не мучайтесь (из файла читать csv будет ещё проще, чем из переменной - просто укажите имя файла в read_csv). Pandas сама соображает, что первая строка - это заголовок (если заголовок имеет другой формат, это легко настраивается):
import pandas as pd
from io import StringIO
csv = """ \
день,месяц,год
12,12,2020
11,04,2019
15,05,1998
20,07,2016
10,01,1988
20,01,2001
01,01,1967
01,05,1999"""
df = pd.read_csv(StringIO(csv))
print('Весна')
print(df[(df['месяц'] > 2) & (df['месяц'] < 6)])
Вывод:
Весна
день месяц год
1 11 4 2019
2 15 5 1998
7 1 5 1999