2013-02-20 52 views
1

我生物學家,非常非常新的Python和之前,我學到了一點R.如何將.txt擴展名的逗號分隔值作爲數組讀入python?

所以我有一個非常大的文本文件(3 GB,太大R中處理),所有的值都是逗號分隔但擴展名是.txt(我不知道它是否是必要的信息)。我想要做的是:

讀入Python作爲一個對象,它是相當於R中數據幀的, 中間 擺脫柱縮小對象 的大小應寫爲txt文件

把剩下的給R。

如果你能幫助我,我會很開心。 謝謝

+3

我推薦[CSV模塊](http://docs.python.org/2/library/csv.html)。 – GreenMatt 2013-02-20 15:40:11

+1

對我來說,這看起來更像是一份'perl'甚至是'sed'的工作......很難說沒有看到至少一行,並且完全理解刪除內部列的規則...... – 6502 2013-02-20 15:43:07

+0

也許'read.csv。來自R中'sqldf'包的sql'可能很有用:http://code.google.com/p/sqldf/。您可以使用SQL從csv中僅提取必需的字段。我對大文件有一些好運,但沒有你的大。 – James 2013-02-20 15:48:59

回答

1

我不熟悉有R數據框,但pandas提供helpers讀CSV到大熊貓數據幀:

from pandas import read_csv  
df = read_csv('yourfile.txt') 
print df 
print df['Line'] 

如果這是你需要的,你可以使用csv模塊通過每一行迭代不算什麼你的CSV作爲一個Python列表,並將其放入任何你想要的數據結構。

+2

讀取整個文件而不進行迭代也可能使用太多的內存。 – 2013-02-20 15:46:31

+0

謝謝你的回答。我使用的Mac OS 10.6和最近我解決了我的計算機(OS)之間的兼容性問題-python版本模塊通過安裝EPD免費分發的幾個包+ python2.7我不知道熊貓是否與我有什麼兼容。我現在會檢查它。 – user2091290 2013-02-21 10:38:51

3

沒有真正需要首先進入python。你的問題看起來很像this question。標記爲正確答案的答案反覆讀取大文件,並創建一個新的較小的文件。其他不錯的替代方案是使用sqlitesqdf包,或使用ff包。最後一種方法的效果特別好,與行數相比,列數很少。

2

這會佔用最少的內存,因爲它不會一次加載整個文件。

import csv 
with open('in.txt', 'rb') f_in, open('out.csv', 'wb') as f_out: 
    reader = csv.reader(f_in) 
    writer = csv.writer(f_out) 
    for row in reader: 
     # keep first two columns and last three columns 
     writer.writerow(row[:2] + row[-3:]) 

注意:如果使用Python 3改變文件模式分別'r''w'

+1

對於python3,您還必須爲輸出文件添加'newline ='''。 – Voo 2013-02-20 17:18:15

+0

謝謝你的回答。我在Mac OS X 10.6上使用了python 2.7和EPD免費發行版。這給了我最後一行中的錯誤,說這是一個語法錯誤,我不知道它是什麼問題,雖然...這是什麼說: 文件「」,第5行 writer.writerow(row [:2] + [-3:]) ^ – user2091290 2013-02-21 10:31:53

+0

@ user2091290:哎呦。那應該是'writer.writerow(row [:2] + row [-3:])''。我忘記了該行的第二個參考。 – 2013-02-21 18:28:57

0

CRAN(新功能和bug修復重新開發)新的開發版本3.0.0應該允許R使用頁面文件/交換。在Windows中,您需要將R_MAX_MEM_SIZE設置爲適當的大值。

+0

這個通用的CRAN鏈接並不是很有用,你能提供一個更具體的鏈接嗎? – 2013-02-20 16:31:37

+0

我的操作系統是Mac OS X 10.6.8我試圖加載該文本文件(〜400 MB)的簡化版本,並且R被凍結。 – user2091290 2013-02-21 09:31:31

+0

我推薦的是R的開發版本。它不是'stable'版本,所以有些軟件包可能還沒有可用。但是,它似乎應該能夠加載您的初始文件,您可以修改它,然後將其另存爲CSV,然後將其加載回穩定版本的R.然後您不需要學習新的技能。當然,基於他們聲稱的3.0.0可以做什麼,這都是我的猜測。 OS X的鏈接在這裏:http://r.research.att.com/R-devel-leopard.pkg – russellpierce 2013-02-21 11:50:12

0

如果你堅持使用預處理步驟,使用linux命令工具是一個非常好的選擇。如果你使用的是Linux,這些工具已經安裝好了,在Windows下你需要先安裝MinGW或者Cygwin。 This SO question已經提供了一些不錯的指針。本質上,您使用awk工具來迭代處理文本文件,隨時創建輸出文本文件。複製形式SO問題的答案接受我聯繫:

awk -F "," '{ split ($8,array," "); sub ("\"","",array[1]); sub (NR,"",$0); sub (",","",$0); print $0 > array[1] }' file.txt 

這讀取文件,抓住八列,並將它轉儲到一個文件中。請參閱答案瞭解更多詳情。