在Python中擦除文本文件的一部分

时间:2018-09-12 08:43:37

标签: python-3.x text text-mining

我的硬盘上有一个非常大的文本文件。它有大约800万个json文件,用逗号分隔,我想删除最后一个json;但是,因为它确实很大,所以我无法通过常规编辑器(Notepad ++,Sublime,Visual Studio Code等)来实现。因此,我决定使用Python,但是我不知道如何使用python擦除现有文件的一部分。任何帮助将不胜感激。

P.S:我的文件具有这样的结构:

json1, json2, json3, ...
when each json looks like {"a":"something", "b":"something", "c":"something"}

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用[]将文件内容包含在其中,从而使文件内容成为有效的JSON,从而使其成为字典列表,然后从列表中删除最后一项将其转储回字符串,然后删除其第一个和最后一个字符,分别是[],这是原始文本文件所不希望的:

import json
with open('file.txt', 'r') as r, open('newfile.txt', 'w') as w:
    w.write(json.dumps(json.loads('[%s]' % r.read())[:-1])[1:-1])

答案 1 :(得分:1)

由于只希望从文件中删除最后一个JSON对象,因此一种更有效的方法是在文件末尾标识第一个有效的JSON对象,并从该JSON对象的前一个逗号所在的位置截断文件。

这可以通过以下方式完成:从文件末尾开始查找并向后读取,一次一次相对较小的块,将缓冲区除以imageView.rx .observe(Optional<Bool>.self, "isHighlighted") .subscribe { } .disposed(by: disposeBag) (因为它标志着JSON对象的开始),然后添加前缀一次将一个片段分到一个缓冲区中,直到该缓冲区可解析为JSON对象(这使代码能够处理嵌套的dict结构)为止,此时您应该从前面的片段中找到前面的逗号,并将逗号添加到缓冲区,以便最终可以找到缓冲区开始的文件并截断​​该文件:

{