2013-02-20 47 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 

这读取文件,抓住八列,并将它转储到一个文件中。请参阅答案了解更多详情。