我有一个有两列的文件,如:
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]值写入另一个按空格分隔的文件。我一行一行。有没有一个解决方案不是那么粗糙。我的意思是,没有将第一行第一列存入外部变量,然后手动将entires写入另一个文件,是否有任何快速方法?
答案 0 :(得分: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)
答案 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)
答案 2 :(得分: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))
答案 3 :(得分: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)