读取和解析大型 .dat 文件
Reading and parsing a large .dat file
我正在尝试解析一个巨大的 .dat 文件 (4gb)。我试过使用 R,但它花费的时间太长了。有没有办法按段解析 .dat 文件,例如每 30000 行?任何其他解决方案也将受到欢迎。
这是它的样子:
这些是带有 header 的前两行:
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|
这是一个选项,可以使用 data.table
包中的 fread
函数在 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
进行类似的优化,但它不会给您几乎一样快的速度。
我正在尝试解析一个巨大的 .dat 文件 (4gb)。我试过使用 R,但它花费的时间太长了。有没有办法按段解析 .dat 文件,例如每 30000 行?任何其他解决方案也将受到欢迎。
这是它的样子:
这些是带有 header 的前两行:
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|
这是一个选项,可以使用 data.table
包中的 fread
函数在 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
进行类似的优化,但它不会给您几乎一样快的速度。