2013-06-03 67 views
-1

我想讀,看起來像這樣的文件:如何刪除重複的值並寫入不同的文件?

83 124 125 
    83 125 126 
    83 126 127 
    83 127 128 
    83 128 128 
    154 120 120 
    154 120 121 
    154 121 122 
    154 122 123 
    154 123 124 
    122 92 93 
    122 93 94 
    122 94 95 
    122 95 96 
    122 96 97 

,並寫入不同的文件,每一套價值觀。第一個值(83/154/122)需要是文本文件的名稱。其餘的值應寫入他們的通訊文件中,如下所示:124 128

所以文件"83.txt"包含124 128。文件"154.txt"包含120 124。而文件"122.txt應該包含92 97

如何迭代上述輸入並從第一列中刪除重複值?然後繼續進行每個第一個值共享的最小值和最大值?最後將每個單獨的行寫入一個特定文件夾內的新文本文件?

我曾嘗試使用:

from itertools import chain 
from collections import defaultdict 
from operator import itemgetter 
from itertools import groupby 

def final(f): 
    with open (f+'.txt', 'r') as fin: 
     lines = fin.readlines().split().strip('\n') 
     v1, v2, v3 = lines[0], lines[1], lines[2] 
     for v1, g in groupby(enumerate(diffs[v1x]), lambda (i, x): i - x): 
      group = map(itemgetter(1), g) 
      lines.itertools.chain() 
      lines = defaultdict(list) 
      print (lines), 

這是什麼,我早些時候曾不完整的版本,但我似乎無法使它工作就像它之前。無論如何,我的代碼結束了很長時間,不可讀......如果需要更多細節來解答這個問題,我會提供給他們。我希望看到不同的看法,而不是簡單地發佈我的原始代碼,並讓它由某人調整。

+2

它仍然是提供現有的代碼「需要」 ......反正 - 是您的文件名總是連續的,或可以出現在任何地方 –

+0

如果這就是你的意思,文件名順序並不重要。 – MaxPower

回答

1

假設文件名是「爲了」,和其他項目都是爲了話:

from itertools import groupby 
from operator import itemgetter 
from collections import deque 

with open('/home/jon/testdata.txt') as fin: 
    lines = (line.split() for line in fin) 
    for k, g in groupby(lines, itemgetter(0)): 
     fst = next(g) 
     lst = next(iter(deque(g, 1)), fst) 
     with open(k + '.txt', 'w') as fout: 
      fout.write(fst[1] + ' ' + lst[2]) 
1
long_string = """ 83 124 125 
    83 125 126 
    83 126 127 
    83 127 128 
    83 128 128 
    154 120 120 
    154 120 121 
    154 121 122 
    154 122 123 
    154 123 124 
    122 92 93 
    122 93 94 
    122 94 95 
    122 95 96 
    122 96 97 
""" 

files = {} 
for line in long_string.split("\n"): 
    try: 
     filenum, minvalue, maxvalue = line.strip().split(" ") 
     try: 
      new_min = min(files[filenum][0], minvalue) 
      new_max = max(files[filenum][1], maxvalue) 
      files[filenum] = (new_min, new_max) 
     except KeyError: 
      files[filenum] = (minvalue, maxvalue) 
    except ValueError: 
     print("There are no 3 values as excpected") 

for filename, values in files.iteritems(): 
    with open(filename + ".txt", "wb") as writer: 
     writer.write(values[0] + " " + values[1]) 
相關問題