Python 要在文件列中找到两个数字之间的差异?

Python 要在文件列中找到两个数字之间的差异?,python,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 32

考虑一个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列10164472197154------需要找到不同的b/w编号,以便第1列应为0164472-0197154-164472,uuuuuuuuu_uuuu_uuuuuuo016447232682

输出文件必须仅更改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的差异,然后再次写回另一个文件。但我提出的输入文件只是一个示例,整个输入文件包含50000行,因此我的尝试失败

我尝试的尝试代码如下所示:

 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的输出文件,我把它一个接一个地写进一个文件中……这很耗时效率不高


因此,如果有人能建议一种更简单的方法,那将是很有帮助的………

不要因为好玩就否决我

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)

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

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() 

我可以建议你尝试一下,并张贴你的尝试,即使你认为你可能会有一些距离。此外,请确认您的文本文件中使用了什么分隔符,即各列之间是否仅用空格、逗号等分隔。@ChrisProsser各列之间用空格分隔,以获取更多信息。我在下面贴了一个答案。@jhon cooper你能帮忙吗