2014-02-12 71 views
0

YamSMit提出了一個問題(請參閱:How to read and write a table/matrix to file with python?)與我正在努力的問題類似:從具有3列和不同行數的Excel表(CSV)開始。列的內容是字符串,浮點和字符串。第一個字符串的長度會有所不同,而另一個字符串可以是固定的(例如2個字符)。該表需要進入2維數組,以便我可以對數據進行操作以生成最終文件(這將是一個文本文件)。我已經嘗試過在stackoverflow中提供的各種策略,但是我總是錯過了一些東西,而且我還沒有看到所有部分的例子,這就是爲什麼要解決這個問題的原因。建立在「如何使用python讀取和寫入表格/矩陣文件?」

樣本數據將類似於: 雷·史密斯,41645.87778,V1

我已閱讀並從可用的文件說,他們做這種類型的代碼很容易探索numpy的和astropy。我曾嘗試導入csv。不知何故,代碼不會在一起。我應該補充說我正在使用Python 3.2.3編寫(這似乎是一個錯誤,因爲很多文檔都是針對Python 2.x的)。

我意識到這個問題的基本性質,指導我閱讀更多的教程。我一直在閱讀很多,但教程總是提到不同的東西,我沒有組裝正確的作品:讀取表格文件,寫入二維數組,然後......做更多的事情。

我非常感謝任何能爲我提供可行的代碼大綱的人,或者指向我閱讀特定文檔以處理我正在編寫的代碼的特定性質的任何人。

非常感謝提前。 (對不起,我只是想完成)

回答

0

我對2.x比較熟悉,但從3.3 csv文檔found here,它似乎與2.x大部分相同。以下函數將讀取一個csv文件,並返回文件中找到的行的二維數組。

import csv 
def read_csv(file_name): 
    array_2D = [] 
    with open(file_name, 'rb') as csvfile: 
     read = csv.reader(csvfile, delimiter=';') #Assuming your csv file has been set up with the ';' delimiter - there are other options, for which you should see the first link. 
     for row in read: 
      array_2D.append(row) 
    return array_2D 

然後,您將能夠操縱數據如下(假設你的csv文件被稱爲「foo.csv」和所需的文本文件是「foo.txt的」):

data = read_csv('foo.csv') 
with open('foo.txt') as textwrite: 
    for row in data: 
     string = '{0} has {1} apples in his Ford {2}.\n'.format(row[0], row[1], row[2]) 
     textwrite.write(string) 
     #if you know the second column is a float: 
     manipulate = float(row[1])*3 
     textwrite.write(manipulate) 

那麼字符串將被寫入 'foo.txt的' 爲:

Ray Smith has 41645.87778 apples in his Ford V1.\n 

和maniuplate將被寫入到 'foo.txt的' 爲:

124937.63334 
+0

rabs,非常感謝。我明白了這是如何運作的。我遇到了一個錯誤,你textwrite變量操作,因爲它需要一個字符串,而不是浮動數字。我通過將其轉換爲字符串來實現它,只是爲了查看該文件是否可以正確寫入。我從你的例子中學到了很多東西! – GeorgeB

+0

沒問題 - 如果你完成了,請考慮接受這個答案,所以人們知道它解決了。乾杯:) – rabs