【问题标题】:Parsing a large text file Python vs c# [closed]解析大型文本文件 Python vs c# [关闭]
【发布时间】:2013-04-04 19:47:18
【问题描述】:

解析 8GB 文本文件的最快方法是什么? Python 的性能会与 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。

【问题讨论】:

  • 您确实需要进一步扩展您正在尝试做的事情,您可以解析它的速度完全取决于实际过程,更不用说更新数据库的延迟以及变量读取不同存储介质上的速度。
  • 嗯,解析一个文本文件很容易......因此,解析它并比较结果
  • 如果您知道哪个 Regex 引擎更快是至关重要的,那么您应该尝试两者。
  • 在几乎所有情况下,用于读取输入文件的 IO 将比您执行的处理更复杂(除非处理本身涉及 IO,在这种情况下,处理的字符串操作部分仍然是程序的一小部分)。我敢打赌,这无关紧要。您可能需要担心的唯一想法是确保您流式传输数据并且不要一次将整个文件放入内存。

标签: c# python regex parsing


【解决方案1】:

解析性能几乎可以肯定在这里完全无关紧要。我希望这些贡献类似于:

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

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

我希望 Python 和 C# 都能很好地做到这一点,假设它们都有相当高效的数据库驱动程序,适用于您正在与之交谈的任何数据库 - 使用您发现更易于维护的任何语言。

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

【讨论】:

    【解决方案2】:

    这样的事情会起作用:

    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
    
    • 如果您需要先修剪线条,您可以使用 trim 来做到这一点

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

    如果您使用的是 mysql,则可以使用“插入延迟”来加快插入过程,因为这将分派查询并立即返回。

    您还可以在插入时禁用索引(如果不需要主/唯一),这也应该加快数据库插入性能。

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

    在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#。您应该同时尝试并报告。

    【讨论】:

    • c# 示例会将整个文件加载到内存中while ((line = streamreader.ReadLine()) != null) 会更有效率
    • 我对 c# 不太熟悉,但我会更新我的答案,因为将整个文件读入内存对于资源使用来说并不理想,并且在读取文件时处理文件几乎总是更快.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多