【发布时间】:2015-03-06 12:03:16
【问题描述】:
我对 Python 完全陌生。我经常使用 Perl,听说 Python 通常更擅长解析文本,所以我想尝试一下,但我想不出最简单的方法来做到这一点(关于信息,我已经在 Perl 中做过,但是花了我几个,缓慢而丑陋的循环):
我想读取一个大文件并提取以相同模式开头的两行之间的文本块,例如:
!NAME: "N0", DESCR: "Netnt Etrnet"
!NAME: "cp0", DESCR: "Cle R0"
!NAME: "slt R1", DESCR: "RSt"
>>!NAME: "moe R1", DESCR: "ASessor 1,bps"
>>!PID: A9-55
>>!VID: G0984981
>>!SN: SEDGH25443N51E
!NAME: "SDFGSDFG: FGT/0", DESCR: "VFDFGX1"
!NAME: "JQFHF1", DESCR: "VNQDF2"
当然“>>”不是文本文件的一部分,它只是为了显示我想要检索的行。
所以回顾一下:我想打印所有块(文件中有更多块),其中块的第一行以“!NAME”开头,并且在下一个“!NAME”之前有其他行。
我不关心连续有两个“!NAME:”的块。
这只是第一步,稍后我将尝试检索此块的值以创建散列(或字典或任何与 python 中的散列等效的东西)。但是我已经卡在第一步了,所以我在寻求帮助哈哈。
谢谢!
【问题讨论】:
-
python 在很多方面都比 perl 好。解析文本不是其中之一。
-
也许你应该改变在 Perl 中做这件事的方式。
-
Perl 非常适合处理文本。这几乎就是它存在的理由
-
我收到评论说 Perl 擅长处理文本。确实如此,而且我从未说过其他话。我说我听说(从同事等处)python 有时会更好。所以我想试一试。我真的没有得到反对票......
-
这就是我现在正在做的事情。我正在使用我用 perl 制作的脚本(我同意,它可能没有优化到最大值),并尝试将其转换为 Python。我会再做几个,这样我会自己看看一个比另一个更好(在我看来)做不同类型的事情