如何将带有.txt扩展名的逗号sep值读入python作为数组?

时间:2013-02-20 15:38:16

标签: python r

我是生物学家,对Python非常新,之前我学到了一点R.

所以我有一个非常大的文本文件(3 GB,在R中处理得太大),所有值都是逗号分隔但扩展名为.txt(我不知道是否有必要的信息)。我想做的是:

将其作为对象读入python,相当于R中的数据帧, 摆脱中间的列 减小对象的大小 把它写成txt文件

将其余部分留给R。

如果你能帮助我,我会非常开心。 谢谢

5 个答案:

答案 0 :(得分:3)

没有必要先进入python。您的问题看起来很像this question。标记为正确答案的答案迭代地读取大文件,并创建一个新的较小文件。其他好的替代方法是使用sqlitesqdf包,或使用ff包。最后一种方法特别有效的是列数与行数相比较小。

答案 1 :(得分: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'

答案 2 :(得分:1)

我不熟悉r数据帧,但pandas提供helpers将csv读入pandas数据帧:

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

如果那不是您所需要的,您可以使用csv模块迭代csv的每一行作为python列表并将其放入您想要的任何数据结构中。

答案 3 :(得分:0)

Per CRAN(新功能和错误修复:开发)新开发版本3.0.0应该允许R使用页面文件/交换。在Windows中,您需要将R_MAX_MEM_SIZE设置为适当大的值。

答案 4 :(得分: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 

读取该文件,获取8列,并将其转储到文件中。有关更多详细信息,请参阅答案。