2017-10-17 46 views
0

我有一個字符串 - 數據從* .TXT讀在轉換剝離串之間的空間,列出

21 197 251 251 253 107 0 0 0 0 0 

要轉換到列表如下:

[21.0, 197.0, 251.0, 251.0, 253.0, 107.0, 0, 0, 0, 0, 0] 

寫了這個功能,試圖選項#1,#2,和#3

def loadCsv(filename): 
    lines = csv.reader(open(filename, "rb")) 
    dataset = list(lines) 
    for i in range(len(dataset)): 
     #1 dataset[i] = [float(x) for x in dataset[i]] 
     #2 dataset[i] = [map(float, x.strip()) for x in dataset[i]] 
     #3 dataset[i]=[map(float, x.split()) for x in dataset[i]] 
    return datase 

當我使用:

  1. 字符串顯然不能被轉換爲浮動,

Error I receive ValueError: invalid literal for float()

  • 我認爲存在這樣導致它的元素之間的空間。
  • ValueError: could not convert string to float: there is space that is causing that error

  • 當我映射串使用此浮動,它適用於這個功能,但然後當我所說的數據進行分類,它呈現
  • unhashable list error

    def separateByClass(dataset): 
        separated = {} 
        for i in range(len(dataset)): 
         vector = dataset[i] 
         if (vector[-1] not in separated): 
          separated[vector[-1]] = [] 
         separated[vector[-1]].append(vector) 
        return separated 
    

    有什麼想法?


    I am updating loadCsv function as below which resolved the issue:


    def loadCsv(filename): 
        lines = open(filename) 
        lines=lines.read() 
        dataset = list(lines.split())#list(lines) 
    
        for i in range(len(dataset)): 
    
         #dataset[i] = [float(x) for x in dataset[i]] 
         #dataset[i]=[map(float, x.strip()) for x in dataset[i]] 
         dataset[i]=[float(x) for x in dataset[i]] 
        return dataset 
    
    +0

    都在同一行或單獨行所有這些號碼? –

    +0

    它的一個排出來多在txt文件 – lpt

    回答

    0

    dataset列表文件中的行的名單,但你的號碼都在一個行,用空格隔開。您必須split該行,並將段轉換爲float

    你的最後一行[map(float, x.split()) for x in dataset[i]]接近,但如果dataset[i]是一條線,然後x是一個字符,即你迭代的行中的字符,分裂那些

    您可以使用map ...

    >>> line = "21 197 251 251 253 107 0 0 0 0 0" 
    >>> list(map(float, line.split())) 
    [21.0, 197.0, 251.0, 251.0, 253.0, 107.0, 0.0, 0.0, 0.0, 0.0, 0.0] 
    

    ...或列表理解:

    >>> [float(x) for x in line.split()] 
    [21.0, 197.0, 251.0, 251.0, 253.0, 107.0, 0.0, 0.0, 0.0, 0.0, 0.0] 
    

    從文件中讀取(無需csv)結合這

    with open("data.txt") as f: 
        text = f.read() 
        data = list(map(float, text.split())) 
    

    不存在不可散列問題:結果是一個列表,它不能是請將set或(作爲關鍵字)放入dict。爲此,您必須將list轉換爲tuple

    +0

    感謝tobias_k的,實際上你的提示幫助。 – lpt

    0

    你可以使用splitlines()和列表理解:

    with open(filename, 'r') as f: 
         r = [float(item) for line in f.read().splitlines() for item in line.split(" ")] 
         print (r)