读取和解析大型.dat文件

时间:2015-05-13 09:47:17

标签: parsing large-data

我正在尝试解析一个巨大的.dat文件(4gb)。我试过用R但是花了太长时间。有没有办法按段解析.dat文件,例如每30000行?任何其他解决方案也将受到欢迎。 这就是它的样子:
enter image description here

这是带头的前两行: ST|ZIPCODE|GEO_ID|GEO_TTL|FOOTID_GEO|NAICS2012|NAICS2012_TTL|FOOTID_NAICS|YEAR|EMPSZES|EMPSZES_TTL|ESTAB|ESTAB_F <br/> 01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|001|All establishments|167| <br/> 01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|212|Establishments with 1 to 4 employees|91|

1 个答案:

答案 0 :(得分:0)

这是一个使用fread包中的data.table函数在R中更快地读取数据的选项。

修改

我删除了所有<br/>个新行代码。这是已编辑的数据集

ST|ZIPCODE|GEO_ID|GEO_TTL|FOOTID_GEO|NAICS2012|NAICS2012_TTL|FOOTID_NAICS|YEAR|EMPSZES|EMPSZES_TTL|ESTAB|ESTAB_F
01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|001|All establishments|167| 
01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|212|Establishments with 1 to 4 employees|91| 

然后我将变量与类匹配。你应该使用nrows ~100。

colclasses = sapply(read.table(edited_data, nrows=1, sep="|", header=T),class)

然后我读了编辑过的数据。

your_data <- fread(edited_data, sep="|", sep2=NULL, nrows=-1L, header=T, na.strings="NA",
        stringsAsFactors=FALSE, verbose=FALSE, autostart=30L, skip=-1L, select=NULL,
        colClasses=colclasses)

一切都像魅力一样。如果你在删除标签时遇到问题,请使用这个简单的Python脚本(肯定需要一些时间):

original_file = file_path_to_original_file # e.g. "/Users/User/file.dat"
edited_file = file_path_to_new_file # e.g. "/Users/User/file_edited.dat"

with open(original_file) as inp:
    with open(edited_file, "w") as op:
        for line in inp:
            op.write(line.replace("<br/>", "")

P.S。

你可以使用read.table进行类似的优化,但它不会给你几乎同样的速度。