首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从二进制文件中提取纯文本输出

从二进制文件中提取纯文本输出
EN

Stack Overflow用户
提问于 2015-02-05 17:01:42
回答 2查看 532关注 0票数 0

我正在使用Graphchi的pagerank示例:https://github.com/GraphChi/graphchi-cpp/wiki/Example-Apps#pagerank-easy

示例应用程序编写了一个包含顶点信息的二进制文件,我希望读取/转换为一个计划文本文件(稍后调用R或其他语言)。

文件指出:

"GraphChi将在二进制文件中写入边的值,这在其他程序中很容易处理。包含顶点值的文件名为GRAPH-NAME.4B.vout。这里"4B“指的是4字节类型(浮点)的顶点值。”

“易于处理”部分是我正在挣扎的地方--我有高级语言的经验,但没有C++或处理二进制文件的经验。通过搜索堆栈溢出,我发现了一些东西,但是在阅读这个文件时没有运气。理想情况下,这可以通过bash或python来完成。

非常感谢你在这方面的帮助。

更新:hexdump graph-name.4B.vout | head -5提供:

0000000 999a 3e19 7468 3e7f 7d2a 3e93 d8e0 3ec4 0000010 cec6 3fe4 d551 3f08 eff2 3e54 999a 3e19 0000020 999a 3e19 3690 3e8c 0080 3f38 9ea3 3ef5 0000030 b7d6 3f66 999a 3e19 10e3 3ee1 400c 400d 0000040 a3df 3e7c 999a 3e19 979c 3e91 5230 3f18

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-08 21:19:49

下面是如何使用GraphCHi将输出写成字符串的示例代码:https://github.com/GraphChi/graphchi-cpp/wiki/Vertex-Aggregators

但是数组是简单的字节数组。下面是如何在python中读取它的示例:

代码语言:javascript
复制
import struct
from array import array as binarray 
import sys

inputfile = sys.argv[1]

data = open(inputfile).read()
a = binarray('c')
a.fromstring(data)

s = struct.Struct("f")

l = len(a)

print "%d bytes" %l

n = l / 4

for i in xrange(0, n):
    x = s.unpack_from(a, i * 4)[0]
    print ("%d %f" % (i, x))
票数 1
EN

Stack Overflow用户

发布于 2015-02-09 22:52:15

我也遇到了同样的麻烦。幸运的是,我和一群帮助我的网络工程师一起工作!在Mac上,下面的命令用于每节点一行打印4B.vout数据,其整数值与摘要文件中给出的整数值相同。如果您的文件名为eg,filename.4B.vout,那么一些命令行perl就会得到:

cat filename.4B.vout LANG= per-0777 -e '$,=“\n\”;打印解包(\“L*\\”,<>),\"\";‘

编辑补充:这是为连接的组件ID和社区ID的分配,隐式地写第一行是标记为0的节点的ID,第2行是标记为1等的节点。但是我在这里复制,所以我不确定它需要如何更改浮点数。它对每个节点的整数值都很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28349805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档