-1

考虑一个有 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

对于第二列,即 column1(0,164472,197154-----------) 需要找到不同的黑白数字,以便 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 行所以我的尝试失败了

我尝试的尝试代码如下:

 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”的输出文件中,我将其一一写入文件中……这很耗时……而且效率不高……

因此,如果有人可以提出一种更简单的方法,那将会很有帮助............

4

2 回答 2

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() 
于 2013-09-13T08:48:15.347 回答
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)
于 2013-09-13T08:45:47.877 回答