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

这可能是一种解决方案:

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 回答