我生物學家,非常非常新的Python和之前,我學到了一點R.如何將.txt擴展名的逗號分隔值作爲數組讀入python?
的所以我有一個非常大的文本文件(3 GB,太大R中處理),所有的值都是逗號分隔但擴展名是.txt(我不知道它是否是必要的信息)。我想要做的是:
讀入Python作爲一個對象,它是相當於R中數據幀的, 中間 擺脫柱縮小對象 的大小應寫爲txt文件
把剩下的給R。
如果你能幫助我,我會很開心。 謝謝
我生物學家,非常非常新的Python和之前,我學到了一點R.如何將.txt擴展名的逗號分隔值作爲數組讀入python?
的所以我有一個非常大的文本文件(3 GB,太大R中處理),所有的值都是逗號分隔但擴展名是.txt(我不知道它是否是必要的信息)。我想要做的是:
讀入Python作爲一個對象,它是相當於R中數據幀的, 中間 擺脫柱縮小對象 的大小應寫爲txt文件
把剩下的給R。
如果你能幫助我,我會很開心。 謝謝
我不熟悉有R數據框,但pandas
提供helpers讀CSV到大熊貓數據幀:
from pandas import read_csv
df = read_csv('yourfile.txt')
print df
print df['Line']
如果這是你需要的,你可以使用csv
模塊通過每一行迭代不算什麼你的CSV作爲一個Python列表,並將其放入任何你想要的數據結構。
讀取整個文件而不進行迭代也可能使用太多的內存。 – 2013-02-20 15:46:31
謝謝你的回答。我使用的Mac OS 10.6和最近我解決了我的計算機(OS)之間的兼容性問題-python版本模塊通過安裝EPD免費分發的幾個包+ python2.7我不知道熊貓是否與我有什麼兼容。我現在會檢查它。 – user2091290 2013-02-21 10:38:51
沒有真正需要首先進入python。你的問題看起來很像this question。標記爲正確答案的答案反覆讀取大文件,並創建一個新的較小的文件。其他不錯的替代方案是使用sqlite
和sqdf
包,或使用ff
包。最後一種方法的效果特別好,與行數相比,列數很少。
這會佔用最少的內存,因爲它不會一次加載整個文件。
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'
。
對於python3,您還必須爲輸出文件添加'newline ='''。 – Voo 2013-02-20 17:18:15
謝謝你的回答。我在Mac OS X 10.6上使用了python 2.7和EPD免費發行版。這給了我最後一行中的錯誤,說這是一個語法錯誤,我不知道它是什麼問題,雖然...這是什麼說: 文件「
@ user2091290:哎呦。那應該是'writer.writerow(row [:2] + row [-3:])''。我忘記了該行的第二個參考。 – 2013-02-21 18:28:57
每CRAN(新功能和bug修復重新開發)新的開發版本3.0.0應該允許R使用頁面文件/交換。在Windows中,您需要將R_MAX_MEM_SIZE設置爲適當的大值。
這個通用的CRAN鏈接並不是很有用,你能提供一個更具體的鏈接嗎? – 2013-02-20 16:31:37
我的操作系統是Mac OS X 10.6.8我試圖加載該文本文件(〜400 MB)的簡化版本,並且R被凍結。 – user2091290 2013-02-21 09:31:31
我推薦的是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
如果你堅持使用預處理步驟,使用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
這讀取文件,抓住八列,並將它轉儲到一個文件中。請參閱答案瞭解更多詳情。
我推薦[CSV模塊](http://docs.python.org/2/library/csv.html)。 – GreenMatt 2013-02-20 15:40:11
對我來說,這看起來更像是一份'perl'甚至是'sed'的工作......很難說沒有看到至少一行,並且完全理解刪除內部列的規則...... – 6502 2013-02-20 15:43:07
也許'read.csv。來自R中'sqldf'包的sql'可能很有用:http://code.google.com/p/sqldf/。您可以使用SQL從csv中僅提取必需的字段。我對大文件有一些好運,但沒有你的大。 – James 2013-02-20 15:48:59