代码之家  ›  专栏  ›  技术社区  ›  Alan Featherston

向文本文件添加行号的快速方法

  •  1
  • Alan Featherston  · 技术社区  · 15 年前

    我有一个文件,里面有12英里长的线,每一行都是这样的:

    070164801648000202000020303000000200907242058CRLF

    我要做的是在数据之前添加一个行编号,这些编号的长度应该是固定的。

    其背后的思想是能够将此文件大容量插入到SQLServer表中,然后使用它执行某些操作,这些操作要求每行都有一个唯一的标识符。我曾在数据库方面尝试过这样做,但我还没能完成一个良好的性能(至少在4'以下,1'以下是理想的)。

    现在我正在尝试用类似于这样的Python解决方案。

    file=open('file.cas', 'r')
    lines=file.readlines()
    file.close()
    text = ['%d %s' % (i, line) for i, line in enumerate(lines)]
    output = open("output.cas","w")
    output.writelines(str("".join(text)))
    output.close()
    

    我不知道这是否有效,但它将帮助我了解它将如何执行和副作用,在我继续尝试新事物之前,我还认为在C中这样做,我有一个更好的记忆控制。

    它是否有助于使用低级语言?有人知道更好的方法吗?我很肯定已经完成了,但我什么都找不到。

    谢谢

    3 回复  |  直到 15 年前
        1
  •  4
  •   David Z    15 年前

    哦,天哪,不,不要一次读完1200万行!如果要使用python,至少要这样做:

    file = open('file.cas', 'r')
    try:
        output = open('output.cas', 'w')
        try:
            output.writelines('%d %s' % tpl for tpl in enumerate(file))
        finally:
            output.close()
    finally:
        file.close()
    

    它使用一个生成器表达式,该表达式一次处理一行文件。

        2
  •  2
  •   Stefano Borini    15 年前

    你为什么不试试N类?

        3
  •  2
  •   Pierre-Antoine LaFayette    15 年前

    斯特凡诺是对的:

    $time cat-n file.cas>输出.cas

    利用时间,这样你就能知道它有多快。因为cat是纯C代码,所以它比python更快。