添加元素到行

时间:2011-03-06 02:26:23

标签: python

我有一个带(空格分隔)数字的日志文件。问题是文件对于autoit来说太大了(1gig文件,内存问题),我看到了一些python魔法。
我想

  1. 在第3次
  2. 之后添加元素
  3. 删除元素4-6
  4. 尽可能快地执行此操作,但关于内存限制。
  5. 1 2 3 4 5 6 7 8 9
    1 2 3 A 7 8 9

    目前我的regExp是

    StringRegExpReplace($line, "(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s", "$1 $2 $3 0 $7 $8 $9")
    

2 个答案:

答案 0 :(得分:2)

Assuming Windows, I'd probably grab a copy of gawk并且比python麻烦少得多。

c:\gawk '{print $1 " " $2 " " $3 " added " $7 " " $8 " " $9}' bigfile.log >> outputfile.log

免责声明:我没有Windows机器来测试它,但它可以在我正在使用的Linux机器上运行...

答案 1 :(得分:2)

无论如何,这是一个Python解决方案:

with open('filename', 'rb') as infile:
    with open('filename.out', 'wb') as outfile:        
        for j, line in enumerate(infile):
            if j == 0: #skip first line
                continue
            listLine = line.split(' ')
            listLine.insert(3, thingToInsert) #elements 4-6 are now elements 5-7
            listLine = (el for i, el in enumerate(listLine) if i>4 and i<=7) 
            outfile.write(' '.join(listLine))

这将非常快,并且不需要太多RAM,因为它逐行读取和写入文件。