2016-11-09 150 views
1

我有一個字符串形式以下值csv文件:不能字符串轉換爲浮動

'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異常:無法將字符串轉換爲浮動。

我怎樣才能解決,而無需編輯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會引發一個錯誤。相反,請讀入整個文件,然後將其分開。過濾掉任何不是一個數字,然後轉換那些花車:中floats

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] 

值:

[838.5, 830.090027, 820.0, 827.559998, 822.880005]