2016-11-09 4 views
1

У меня есть CSV-файл со следующими значениями в виде строки:Не удается преобразовать строку в Float

'838.5', 
'830.090027', 
'820', 
'827.559998', 
'822.880005' 

И читаю файл вроде этого:

file = [] 
for line in open('project.csv'): 
    our_data = line.split(",") 

    data.append(our_data) 

Я попытался преобразовать их в плавает следующим образом:

data = [float(x) for x in file] 

Но я получаю эту ошибку, когда я запускаю программу:

ValueError: не удалось преобразовать строку в float:.

Как решить эту проблему без необходимости редактировать файл csv?

+1

Как вы читаете файл? –

+0

файл '= [] для линии в открытом ('project.csv'): our_data = line.split ("") data.append (our_data)' –

+0

Не могли бы вы добавить, что на ваш вопрос.Это облегчило бы всех, кто может помочь вам. –

ответ

0

Исходный файл содержит кавычки и строку прерывания (\ n), но вы пытаетесь избавиться от строки прерывания (но еще не сделали). Прежде всего, необходимо извлечь строку (кавычки и номер) с выходом split(), вторым вам нужно избавиться от кавычек, а затем использовать поплавок (...), чтобы преобразовать их в поплавки:

for line in open('project.csv'): 
    our_data = line.split(",") 
    print our_data 
    our_data = our_data[0][1:-1] 
    print our_data 
    print float(our_data) 

даст вам результат:

["'838.5'", '\n'] 
838.5 
838.5 
["'830.090027'", '\n'] 
830.090027 
830.090027 
["'820'", '\n'] 
820 
820.0 
["'827.559998'", '\n'] 
827.559998 
827.559998 
["'822.880005'"] 
822.880005 
822.880005 
1

Всегда больше, чем один способ кожи кошки, но вот что я хотел бы сделать:

# Read the entire contents of the file into a string (`numbers`). 
# This includes newline characters and single-quotes. 
with open('project.csv') as infile: 
    numbers = infile.read() 

# Then remove the newline characters and single-quotes 
# (replace each with the empty string, thus removing them) 
# resulting in a string with numbers separated by commas 
# e.g., `123.3,45.9,39.1` 
numbers = numbers.replace("'","").replace("\n","") 

# Then create a new list by splitting the string on comma 
# and converting each individual item to a float 
numbers = [float(num) for num in numbers.split(',')] 

Примечания:

  • Если файл действительно большой, вы можете перебирать строку за строкой, а не читать весь файл в.

  • Если входной файл может содержать ошибки форматирования, вы должны будьте осторожны, чтобы избежать непредвиденных исключений.

0

У вас, кажется, некоторая путаница в правильном открытии и разбиении файла. Это должно сработать. Ваша проблема в том, что вы читаете каждую строку из файла, а затем пытаетесь разбить ее. Что ваше фактическое добавление к data что-то вроде этого:

['838.5', ',']

А вы попробуйте преобразовать это поплавок, который, конечно, означает, что Python вызовет ошибку. Вместо этого прочитайте весь файл, а затем разделите его. Фильтр из ничего, что не является числом, а затем преобразовать те поплавка:

with open('project.csv') as file: 
    file = file.readlines() 

file = [el[1:-1] for line in file for el in line.split(',')] 
floats = [float(el) for el in file if el] 

Значение floats:

[838.5, 830.090027, 820.0, 827.559998, 822.880005] 
Смежные вопросы