0

次のような2つの列を持つファイルがありました。

13.245 cat
14.323 dog
16.246 pig

最初の行の最初の列の値(ここでは13.245)で最初の列の各エントリを減算し、出力ファイルが次のようになるように、値を変更して別のファイルに結果を書き込みます。

0.000 cat
1.078 dog
3.001 pig

私は非常に粗雑な解決策を持っていました。値13.245を変数に格納し、各行を分割し、split()[0]エントリから13.245値を減算し、その値とsplit()[1]値をスペースで区切られた別のファイルに書き込みます。私はこれを一行ずつ行います。これほど粗雑ではない解決策はありますか?つまり、最初の行エントリの最初の列を外部変数に格納してから、全体を別のファイルに手動で書き込むことなく、迅速な方法はありますか?

4

4 に答える 4

1
data = """13.245 cat
14.323 dog
16.246 pig"""
parsed_data = [(float(x[0]), x[1]) for x in [x.split() for x in  data.splitlines()]]
subtract = parsed_data[0][0]
for (num, animal) in parsed_data:
    print "%.3f %s" % (num - subtract, animal)
于 2012-05-25T17:21:37.660 に答える
1

これは1つの解決策である可能性があります。

def process_line(line, first_value, outf):
    parts = line.strip().split(' ')
    parts[0] = '%.3f' % (float(parts[0]) - first_value)
    print >>outf, ' '.join(parts)

with open('in.txt') as inf, open('out.txt', 'w') as outf:
    first_line = inf.readline().strip()
    first_value = float(first_line.split(' ', 1)[0])
    process_line(first_line, first_value, outf)
    for line in inf:
        process_line(line, first_value, outf)
于 2012-05-25T17:21:52.480 に答える
0
with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
    first_line = infile.readline().split()
    first_val = float(first_line[0])
    outfile.write("%.3f %s\n" % (0, first_line[1]))

    for line in infile:
        first_col, second_col = line.split()
        outfile.write("%.3f %s\n" % (float(first_col) - first_val, second_col))
于 2012-05-25T17:19:43.010 に答える
0

あなたは、これ以上簡単にできないことを求めています。しかし、これはおそらくあなたがそれを作ることができる最短です. ところで、Python のどのバージョンですか? これは3用です。

with open('<file_name>') as input_file, open('<output_file>', 'w') as output_file:
    lines = list(map(lambda line: (float(line[0]), line[1]), map(lambda line: line.split(), input_file)))
    for line in lines:
        print(line[0] - lines[0][0], line[1], file=output_file)
于 2012-05-25T17:25:27.470 に答える