2015-04-12 206 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青梅。 –