使用 grep 或 python 解析大文件

问题描述 投票:0回答:1

我正在处理一个 20 GB 的大 ttl 文件,我尝试使用 rdflib 读取,但出现错误

killed

我正在尝试使用 grep 命令从此文件创建一个较小的文件。

示例数据为yagoTransitiveType.ttl

grep "wordnet_" yagoTransitiveType.ttl >wordnet_yagoTransitiveType.ttl

问题是该文件无法读取 yago: 等初始前缀,因此 rdflib 无法解析 ttl 文件。

import rdflib
g = rdflib.Graph()
g.parse('yagoTransitiveType.ttl', format='ttl')

如何通过在运行 grep 命令后添加 10 行或任何其他方式来解决该问题?

linux grep sparql rdflib sparqlwrapper
1个回答
0
投票

据我了解,您想保留两种类型的数据之一:

  • 不包含
    rdf:type
  • 的数据
  • 同时包含
    rdf:type
    wordnet_
    的数据(按顺序)

效率较低,这可能看起来像:

{
  grep -v rdf:type yagoTransitiveType.ttl
  grep -Ee 'rdf:type.*wordnet' yagoTransitiveType.ttl
} >filtered.ttl

...或者,更有效(仅读取输入文件一次):

awk '
  ! /rdf:type/ { print; next }
  /rdf:type/ && /wordnet_/ { print }
' yagoTransitiveType.ttl >filtered.ttl
© www.soinside.com 2019 - 2024. All rights reserved.