解析大型文本文件Python vs c#

本文关键字:Python vs 文件 文本 大型 | 更新日期: 2023-09-27 18:07:22

解析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。

解析大型文本文件Python vs c#

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

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

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

我希望Python和c#都能很好地解决这个问题,假设它们都有相当有效的数据库驱动程序,无论您正在与哪个数据库交谈-使用您认为更容易维护的语言。

请注意,虽然您当然可以利用的一些并行性,但如果网络最终成为瓶颈,它可能不会有太大的区别。批处理数据库写操作可能更重要——在我看来,这是您应该尝试的部分。

这样就可以了:

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,你可以使用"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#有优势。