2015-04-12 91 views
0

我正在尝试编写一个代码,用于从text.txt读取内容并将其更新的版本写入同一个文件。 所述的text.txt tooks这样的:读取文件并更改其内容

Amata Hock,1.80,88 
Mack Romer,1.79,85 

其中第一个数字是高度和第二是重量。为了更新我的文件,我需要计算高度和数字,以便在新版本中可以仅显示计算出的数字。

with open("text.txt",'r') as my_file: 
    file_str = my_file.read().split("\n") 
for i in range(len(file_str)): 
    file_str[i] = file_str[i].split(",") 
    file_str[i][1] = float(file_str[i][1]) 
    file_str[i][2] = float(file_str[i][2]) 
    file_str[i].append((file_str[i][2])/(file_str[i][1]**2)) 

with open("text.txt", 'w') as my_file: 
    my_file.write("".join(str(file_str))) 
    my_file.close() 

但是,我也遇到了问题,这是因为在更新后的文件我还是看到了身高和体重(因为我把他们交给整数)。更新后的版本如下所示:

[['Amata Hock', 1.8, 88.0, 27.160493827160494], ['Mack Romer', 1.79, 85.0, 26.528510346119035]] 

有没有办法从更新的文件中排除重量和高度?

回答

2

您可以使用fileinput.inputinplace=True修改原始文件:

import fileinput 

for line in fileinput.input("input.txt",inplace=True): 
    # split into name weight and height 
    name,a,b = line.split(",") 
    # write just the name and weight/height ** 2 
    print("{},{}".format(name, float(b)/float(a)**2)) 

输出:

Amata Hock,27.160493827160494 
Mack Romer,26.52851034611903561 

要做到这一点重启可以先存储计算的重新开放,并使用CSV文件。编写者编写数据:

import csv 
with open("input.txt",'r') as f: 
    data = ((name, float(b)/float(a)**2) for name, a, b in [line.split(",") for line in f]) 
    with open("input.txt","w") as out: 
     wr = csv.writer(out) 
     wr.writerows(data) 
+0

@SteveLee,没有问题,你是welc青梅。 –

相关问题