Вопрос:
У меня есть цикл 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)