从大文件中删除精确的字符串?

2024-03-28 10:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在文件中有以下格式的数据:

    <http://purl.uniprot.org/here>   <http://purl.uniprot.org/here/unipot/purl>
    <http://purl.uniprot.org/uniprot/Q196Y7>        <http://purl.uniprot.org/core/annotation>

我想删除角括号内的所有“http://purl.uniprot.org”。这样我得到的输出是

    <here>   <here/unipot/purl>
    <uniprot/Q196Y7>        <core/annotation>

我试着用vi的replace命令来实现。但结果是相当慢,因为我的文件是1TB。使用linux/python有没有更有效的方法来做同样的事情

我知道我可以使用sed,但是sed找到了sed的模式并删除了它们,而我想删除确切的内容


Tags: 文件数据orgcorehttphere格式annotation
3条回答

As Radu Rădeanu saidsed是替换文件中字符串的好工具,因为它可以在流上工作,而不是试图将整个文件加载到内存中。你知道吗

但是sed使用正则表达式,在您的情况下(1TB的输入数据),这可能太慢了。Unix工具通常可以处理任意大小的文件,它们的效率出奇的高,但是角落案例可能太多了。你知道吗

如果您需要优化流程,以下是一些要点:

  1. 把大文件分成小文件。例如,如果这是一个日志文件,则每天创建一个文件,而不是将所有内容连接到一个大文件中。这样,您就可以在每个每日文件中剥离字符串一次。

  2. 编写一个小的C程序来搜索精确的字符串(而不是使用regexp)。然后可以使用Boyer-Moore之类的优化来获得巨大的性能提升。您还应该考虑使用内存映射I/O。

这应该从命令行执行:

sed -i 's/http:\/\/purl.uniprot.org\///g' /path/to/filename

您可以先不使用-i参数来查看控制台中的输出。你知道吗

你所说的是什么意思,但结果却是相当“?完全是什么? 如果是我,vi就是一个很好的例子工具运行此命令:

:s/http:\/\/purl.uniprot.org\//g

相关问题 更多 >