В CSV нет типов
Всё, что приходит из таблицы, — строка, включая «120» и «0».
Главное
CSV — это текст. Столбец с ценами приходит строками, и никакой разбор этого не меняет:
import csv
with open("prodazhi.csv", encoding="utf-8", newline="") as f:
for zapis in csv.DictReader(f):
print(zapis["цена"], type(zapis["цена"]))
# 180 <class 'str'>
Как кусается
itogo = 0
for zapis in csv.DictReader(f):
itogo += zapis["цена"] # TypeError
Это ещё хорошо — программа падает сразу. Хуже, когда складывается:
itogo = ""
for zapis in ...:
itogo += zapis["цена"] # "180120150" — и ни одной ошибки
Как надо
Превращать явно и переживать неудачу:
try:
cena = int(zapis["цена"])
except (ValueError, TypeError, KeyError):
continue
Три типа ошибок не для красоты: ValueError на прочерке вместо
числа, TypeError если значение оказалось None (бывает при
неровном числе столбцов), KeyError если столбца нет — выгрузка
могла поменяться.
Автоматически угадывать типы не надо
Соблазн велик: пройтись по всем столбцам и превратить в числа всё, что превращается. Так делать не стоит.
Телефон +79000000000, артикул 007, индекс 01234 — всё это
превратится в числа и потеряет вид. Артикул 007 станет семёркой, и
найти товар по нему станет нельзя.
Список числовых столбцов задаётся явно. Это не лень, а решение.
Ещё два довода про CSV
newline="" при открытии — не суеверие: без него значения с
переводом строки внутри ячейки рвутся пополам.
Кодировку указывайте всегда. Выгрузка из 1С и файл на вашей машине вполне могут быть в разных.