2014-02-23 49 views
0

我想從文件中取出浮動並將它們放入數組中。每個浮動都有自己的線。我對Python有點新(而不是我試圖執行的概念),並且它不像我期望的那樣工作。如何將float存儲到array.array中?

from array import array 

def read_file(infilename): 
    infile = open(infilename, 'r') 
    array('f') 
    for line in infile: 
      array.append(line) 

def main(): 
    filename = "randFloats.txt" 
    read_file(filename) 
    print('Successfully completed placing values in array.') 

main() 

似乎直線前進足夠的,但是當我嘗試執行,我得到以下錯誤:

Traceback (most recent call last): 
    File "sortFloat.py", line 14, in <module> 
    main() 
    File "sortFloat.py", line 11, in main 
    read_file(filename) 
    File "sortFloat.py", line 7, in read_file 
    array.append(line) 
TypeError: descriptor 'append' requires a 'array.array' object but received a 'str' 

我知道Python的瀏覽量文件的內容,作爲一個龐大的字符串,我已經創建了一個浮點數組,但這甚至不是問題......它想讓我傳遞一個array.array對象而不是普通的字符串。如果我將它轉換爲浮點,此問題仍然存在。

我該如何解決這個問題?在人們建議列表之前,是的,我確實需要數據中的數據。

回答

2

array('f')的調用將創建您需要存儲的參考實例。此外,刪除每行的空格,並將其解釋爲浮點數。完成後關閉文件。

from array import array 

def read_file(infilename): 
    infile = open(infilename, 'r') 
    arr = array('f') #Store the reference to the array 
    for line in infile: 
      arr.append(float(line.strip())) #Remove whitespace, cast to float 
    infile.close() 
    return arr 

def main(): 
    filename = "randFloats.txt" 
    arr = read_file(filename) 
    print('Successfully completed placing %d values in array.' % len(arr)) 

main() 
1

您需要先初始化數組變量,說arr,然後用它來附加變量的值,

def read_file(infilename): 
    infile = open(infilename, 'r') 
    arr = array('f') 
    for line in infile: 
     arr.append(float(line)) # <-- use the built-in float to convert the str to float 

此外,您可能需要的所有值追加到它後返回變量arr

def read_file(infilename): 
    ... 
    return arr 
+0

這會試着把'str'對象放在'array'中,它需要一個'float'。這將如何工作? –

+0

@EricUrban正確。我錯過了那一個。修復。 – rae1

1
import array 
a = array.array('f') 
with open('filename', 'r') as f: 
    a.fromlist(map(float, f.read().strip().split())) 
print a 
+0

好的答案,但'f.read()'需要將整個文件讀入內存,然後分割成一串字符串。對於小文件這可以工作。如果文件很大,最好跨文件進行迭代。 –

1

好......所以你需要做的是:

array1 = array('f') # Assign that object to a variable. 

及更高版本:

array1.append(line) 

你所得到的錯誤,因爲你不知道實際上創建一個可以訪問的變量。因此,當我們調用append方法時,我們實際上並沒有指定要追加的數組,只有我們想要添加的字符串。

相關問題