Проверьте наличие файлов в формате csv python3 - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь прочитать CSV-файл и создать двумерный список из значений, хранящихся внутри.

Однако у меня возникают проблемы, когда я пытаюсь проверить, можно ли преобразовать сохраненные значения в числа с плавающей запятой.

Вот функция, которую я написал, которая читает файл и создает список.

def readfile(amount, name):
    tempfile = open(name).readlines()[1:]    #First value in line is never a float, hence the [1:]
    rain_list = []
    count = 0.0
    for line in tempfile:            
        line = line.rstrip()
        part = line.split(",")
        try:
            part = float(part)
        except ValueError:
            print("ERROR: invalid float in line: {}".format(line))
        rain_list.append(part[amount])
        count += 1
    if count == 0:
         print("ERROR in reading the file.")
    tempfile.close()
    return rain_list

Это может быть немного грязно, так как по сути это лоскутное одеяло из различных возможных решений, которые я пробовал.

Получаемые значения - это имя файла (имя) и количество значений, которые он читает из файла (сумма).

Кто-нибудь понял, почему это не работает, как я ожидаю, что это будет работать?

1 Ответ

0 голосов
/ 06 ноября 2018

part - список строк. Чтобы проверить и конвертировать все поплавки, вам нужно сделать:

part = [float(x) for x in part]

(в вашем блоке исключений)

Кстати, вы должны использовать модуль csv для чтения файлов через запятую. Это встроенный. Также использование enumerate позволит печатать строку, в которой происходит ошибка, а не только данные:

reader = csv.reader(tempfile)  # better: pass directly the file handle
# and use next(reader) to discard the title line
for lineno,line in enumerate(reader,2):  # lineno starts at 2 because of title line
    try:
        line = [float(x) for x in line]
    except ValueError:
        print("ERROR: invalid float in line {}: {}".format(lineno,line))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...