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

这是我之前的不完整版本,但我似乎无法让它像以前那样工作。无论如何,我的代码最终很长而且不那么可读......如果需要更多细节来回答这个问题,我会提供它们。我希望看到对此的不同看法,而不是简单地发布我的粗略代码并让某人对其进行调整。

4

2 回答 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])
于 2013-06-03T21:06:46.547 回答
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])
于 2013-06-03T20:38:21.093 回答