В Python; Как пропустить недопустимое значение в цикле «for»?

Вопрос: У меня есть цикл for настроенный на чтение значений X и Y из.csv, пока что так хорошо. Однако.csv составляет 65 000 строк! и около 2000 из них - просто пустые строки. Как сообщить циклу for игнорировать/пропускать пустые строки и просто получить следующий набор значений? Я пытался использовать "продолжить", как это... for line in lines:

Вопрос:

У меня есть цикл for настроенный на чтение значений X и Y из.csv, пока что так хорошо.

Однако.csv составляет 65 000 строк! и около 2000 из них – просто пустые строки.

Как сообщить циклу for игнорировать/пропускать пустые строки и просто получить следующий набор значений?

Я пытался использовать “продолжить”, как это…

for line in lines: #split the content of each line to an array delimited by a comma , pos = [x.strip() for x in line.split(‘,’)] if pos == «»: continue else: #set up variables x = float(pos[0])*10000 y = float(pos[1])*10000 z = 0.0

Но это не сработает, всякий раз, когда он попадает в первую пустую строку, он просто добавляет нули для остальных, и я получаю это сообщение об ошибке…

ValueError: empty string for float()

Я попытался удалить пустые строки в Apple Numbers до того, как Python импортирует их, но, видимо, что-то простое, как удаление пустых строк, является полным шаром в Numbers.

Я также пытался вычеркнуть все пустые переменные перед циклом For Loop, но не мог заставить это работать.

Любые указатели будут очень благодарны, но, пожалуйста, держите это просто! (Я новичок в этом, и более эзотерический код идет прямо над моей головой).

Ответ №1

В проверке равенства pos больше не является строкой, это список. Таким образом, вы можете проверить, пуста ли сама строка:

for line in lines: if line.strip() == «»: continue #split the content of each line to an array delimited by a comma , pos = [x.strip() for x in line.split(‘,’) if x.strip()] # make sure you have x and y if len(pos) < 2: continue #set up variables x = float(pos[0])*10000 y = float(pos[1])*10000 z = 0.0

Добавляя условие if при определении pos, мы теперь отбрасываем пустые элементы.

Ответ №2

Я новичок в python, но думаю, вы можете попробовать код ниже. Моя мысль: если есть пустая строка, длина строки должна быть 0. Спасибо.

if not line: continue Ответ №3

Из исключения: ValueError: пустая строка для float() Я делаю вывод, что “пустые строки” означают что-то вроде “1,” в вашем случае, т.е. Вы получаете ошибку, если любое из (первых двух) полей в строке пустое (содержат только пробелы):

for line in lines: try: x, y = map(float, line.split(‘,’)[:2]) except ValueError: continue # skip invalid (for whatever reason) lines else: # use x, y here x *= 10000 y *= 10000 z = 0.0 print(x, y, z)

пример

1,2 # the next line is blank AND IT IS SUCCESSFULLY SKIPPED NO 0,0 # missing second field 70, # both empty , # first empty ,0 # ,,80,90 3,4

Вывод

(10000.0, 20000.0, 0.0) (30000.0, 40000.0, 0.0)

Оцените статью
Добавить комментарий