在文件列中查找两个数字的区别b / w?

时间:2013-09-13 07:03:52

标签: python

考虑一个包含5列(0-5)的输入文件:

 1  0   937 306 97  3
 2  164472  75  17  81  3
 3  197154  35268   306 97  3
 4  310448  29493   64  38  1
 5  310541  29063   64  38  1
 6  310684  33707   64  38  1
 7  319091  47451   16  41  1
 8  319101  49724   16  41  1
 9  324746  61578   1   5   1
10  324939  54611   1   5   1

对于第二列i,e column1(0,164472,197154 -----------)需要找到差异b / w数字,以便column1应为(0,164472-0) ,197154-164472, _ ___ )所以(0,164472,32682 ..............)。

输出文件必须只更改column1值,所有其他值必须保持与输入文件相同:

 1  0   937 306 97  3
 2  164472  75  17  81  3
 3  32682   35268   306 97  3
 4  113294  29493   64  38  1
 5  93  29063   64  38  1
 6  143 33707   64  38  1
 7  8407    47451   16  41  1
 8  10  49724   16  41  1
 9  5645    61578   1   5   1
10  193 54611   1   5   1

如果有人可以建议使用python代码来执行此操作,那将会很有帮助........

实际上我试图将所有列附加到列表中并找到column2的差异并再次写回另一个文件。但是我提出的输入文件只是一个示例,整个输入文件包含50,000行,所以我的尝试失败< / p>

我尝试的尝试代码如下:

 import sys
 import numpy
 old_stdout = sys.stdout

 log_file = open("newc","a")

 sys.stdout = log_file
 a1 = []; a2 = []; a2f = []; v = []; a3 = []; a4 = []; a5 = []; a6 = []
 with open("newfileinput",'r') as f:
   for line in f:
     job = map(int,line.split())
     a1.append(job[0])
     a3.append(job[2])
     a4.append(job[3])
     a5.append(job[4])
     a6.append(job[5])
     a2.append(job[1])
   v = [a2[i+1]-a2[i] for i in range(len(a2)-1)]
print a1
print v
print a3
print a4
print a5
print a6


sys.stdout = old_stdout

log_file.close() 

现在从包含6个列表的代码“newc”的输出文件中我逐个将其写入文件中......这非常耗时....&amp;效率不高......

所以,如果有人能提出一个更简单的方法,那将会很有帮助..........

2 个答案:

答案 0 :(得分:2)

试试这个。如果有任何问题或者您是否希望我解释任何代码,请告诉我:

import sys
log_file = open("newc.txt","a")
this_no, prev_no = 0, 0

with open("newfileinput.txt",'r') as f:
    for line in f:
        row = line.split()
        this_no = int(row[1])
        log_file.write(line.replace(str(this_no), str(this_no - prev_no)))
        prev_no = this_no

log_file.close() 

答案 1 :(得分:0)

不要为了好玩而向我投票。

import re
from time import sleep

p = re.compile(r'\s+')

data = '''1  0   937 306 97  3
2  164472  75  17  81  3
3  197154  35268   306 97  3
4  310448  29493   64  38  1
5  310541  29063   64  38  1
6  310684  33707   64  38  1
7  319091  47451   16  41  1
8  319101  49724   16  41  1
9  324746  61578   1   5   1
10  324939  54611   1   5   1\n''' * 5000

data = data.split('\n')[0:-1]
data = [p.split(one) for one in data]
data = [map(int, one) for one in data]


def list_diff(a, b):
    temp = a[:]
    temp[1] = a[1] - b[1]
    return temp

result = [
        data[0],
    ]

for i, _ in enumerate(data):
    if i < len(data) - 1:
        result.append(list_diff(data[i+1], data[i]))

for i, one in enumerate(result):
    one[0] = i+1
    print one
    sleep(0.1)