解析大文本文件Python vs c#

时间:2013-04-04 19:47:18

标签: c# python regex parsing

解析8GB文本文件的最快方法是什么?蟒蛇的表现会与c#相提并论吗?

exampledomain NS ns.anameserver.com.
exampledomain NS ns2.anameserver.com.
exampledomain NS ns3.anameserver.com.
anotherdomain NS ns1.nameservers.com.
cooldomain NS ns.example.com.
cooldomain NS ns2.example.com.

我需要解析每一行并用每行的第一和第三项更新数据库表,忽略每行中的NS。

2 个答案:

答案 0 :(得分:4)

解析性能几乎肯定与此完全无关。我希望贡献是这样的:

  • 用于写入数据的数据库访问
  • 用于读取数据的磁盘访问
  • 用于解析的CPU

按顺序,每个子弹之间很可能有一个数量级的差异,这取决于数据库是否是本地的(以及网络的速度等)和磁盘类型(如果它是一个SSD将是一个很快)。

我希望Python和C#都可以这样做,假设它们都有适合你所使用的数据库的相当高效的数据库驱动程序 - 使用你会发现哪种语言更容易维护。

请注意,虽然您当然可以利用某些并行性,但如果网络最终成为瓶颈,那么它可能不会产生很大的差异。批处理数据库写入可能更重要 - 这是你应该试验的一点,IMO。

答案 1 :(得分:1)

这样的事情会起作用:

ins = open( "file.txt", "r" )
for line in ins:
    linesplit = line.split(" ")
    # linesplit should contain your 3 elements which you can then insert into your db
  • 如果您需要先修剪线条,可以使用修剪
  • 进行修剪

性能限制很可能是您的数据库写入/插入速度。

如果你正在使用mysql,你可以使用“insert delayed”来加速插入过程,因为这将调度查询并立即返回。

您还可以在执行插入时禁用索引(如果不需要primary / unique),这也可以加快db插入性能。

如果您正在进行更新,请确保您的查阅列已编入索引。

在c#中它会是这样的

using System;
using System.IO;

class Program {
    static void Main() {
        StreamReader sr = new StreamReader("file.txt");
        while ((line = sr.ReadLine()) != null) {
             string[] linesplit = line.Split(' ');
             // linesplit has your elements, do your db stuff
        }
    }
}

我认为两种语言之间的性能几乎完全相同,而c#的内存占用开销优势。您应该尝试两者并报告。