2015-10-26 8 views
0
def func(): 
import csv 
file=open("cmiday.csv") 
x,y=[],[] 
reader=csv.DictReader(file) 
for row in reader: 
    if(type(row["max_rel_hum"])%1==0): 
     continue 
    if(type(row["precip"])%1==0): 
     continue 
    if(row["max_rel_hum"]>100): 
     continue 
    if(row["max_rel_hum"]<0): 
     continue 
    if (row["precip"]>10): 
     continue 
    if(row["precip"]<0): 
     continue 
    x.append(row["max_rel_hum"]) 
    y.append(row["precip"]) 
print x 
print y 

Я пытаюсь собрать данные из файла csv в списки x и y. Я не хочу, чтобы любые значения для строки ["max_rel_hum"] были целыми числами или были более 100 или менее 0. Аналогичным образом, я не хочу, чтобы значения для строки ["обход"] были более 10 или менее чем 0. Я получаю эту ошибку, когда я пытаюсь запустить эту функцию:Python 2.7.10 ValueError: Неполный формат, если оператор

>>> func() 
Traceback (most recent call las 
    File "<stdin>", line 1, in <m 
    File "hw.py", line 7, in func 
    if(row["max_rel_hum"]%1==0) 
ValueError: incomplete format 

Прошу помочь. Спасибо

ответ

0

Значения CSV - это строки, а не целые числа. Вы ожидаете, что % сделать modulo, но в строке он строит форматирование.

Вам нужно что-то вроде этого:

if (int(row["max_rel_hum"]) % 1 == 0): 

И вам нужно сделать int() для всех линий, даже < и > из них - они являются действительными операции со строками, но будет делать сравнение алфавитный порядок , а не числовое сравнение и не даст ожидаемых результатов.

Не нужно type() в линии if вообще.

+0

Так что я попробовал то, что вы сделали, и он вернулся эту ошибку >>> FUNC() Traceback (самый последний вызов последним): Файл "", строка 1, в Файл "hw.py", строка 11 , в func , если int (row ["max_rel_hum"])% 1 == 0: ValueError: недействительный литерал для int() с базой 10: '95 .9 ' –

+0

О, я пропустил бит, где вы сказали «Я не знаю», t хотят, чтобы они были целыми числами ", и я предположил, что, поскольку вы делали modulo, вы должны хотеть, чтобы они были целыми числами. Попробуйте 'float()' вместо 'int()' - (хотя я не уверен, появятся ли ошибки округления с плавающей запятой в этом виде использования). – TessellatingHeckler

Смежные вопросы