python - sed 不适用于大文件[寻找其他选项]

标签 python json bash sed gnu

我有一个巨大的 json 文件,意外输出时所有 json 条目之间没有换行符。它被视为一条巨大的单线。所以我所做的就是尝试用 sed 查找替换并插入换行符。

sed 's/{"seq_id"/\n{"seq_id"/g' my_giant_json.json

它不输出任何内容

但是,如果我只对文件的一小部分进行操作,我知道我的 sed 表达式可以正常工作,并且可以正常工作。

head -c 1000000 my_giant_json.json |  sed 's/{"seq_id"/\n{"seq_id"/g'

我也尝试过使用 python 和这个粗糙的衬里

'\n{"seq_id'.join(open(json_file,'r').readlines()[0].split('{"seq_id')).lstrip()

但是由于 readlines() 方法,这会加载到内存中。但我不知道如何迭代巨大的单行字符(分块迭代)并进行查找和替换。

有什么想法吗?

最佳答案

Perl 允许您将输入分隔符 ($/) 从换行符更改为另一个字符。您可以利用这一点来获得一些方便的分块。

perl -pe'BEGIN{$/="}"}s/^({"seq_id")/\n$1/' my_giant_json.json

这将输入分隔符设置为"}"。然后它会查找以 {"seq_id" 开头的 block 并以换行符作为前缀。

请注意,它在开头放置了一个不必要的空行。您可以使程序复杂化以消除该问题,或者在之后手动将其删除。

关于python - sed 不适用于大文件[寻找其他选项],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48388833/

相关文章:

PYTHON-如何解决问题 : pywintypes. 错误 : (5, 'OpenClipboard' , 'Access is denied' )

jquery - 按名称拆分 json 对象

javascript - 使用 json 数据构建 C3.js 图形

创建多个列表中包含的所有值的联合的 Pythonic 方法

python - 如何处理与坐标的碰撞? (在 python 中)

javascript - 在 JavaScript 中将变量分配给对象

Linux 命令 : Why does the redirection operator - | i. e。管道在这里失败?

bash - 具有多种颜色的 Grep 输出?

bash - 从 makefile 到 bash 的变量

python - 对seaborn histplot 中的重叠条有一些指示