-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

2 番目の列、つまり 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」の出力ファイルから、1つずつファイルに書き込みました...これには時間がかかりました....&あまり効率的ではありません...

したがって、誰かがより簡単な方法を提案できれば、それは役に立ちます........

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 に答える