2017-05-30 105 views
1

我應該編寫一個程序來讀取一個文件,然後計算高度和重量列的最大值和最小值以及平均值,並添加一個附加列,該B列的計算基於BMI每個身高和體重。 文件的格式像這樣:解析並處理表格.txt文件

Name  Height(m) Weight(kg) 
Joe   1.82  72.57 
Mary  1.60  63.50 
Dion  1.90  90.71 
Kayla  1.72  66.31 
Jose  1.78  70.23 
Sofia  1.63  65.12 
Erik  1.98  92.21 
Sara  1.57  65.77 

輸出應該如下: expected output

我有非常非常基本下跌(閱讀文本文件)。我知道我需要做的下一步是遍歷每列,並加起來所有的數據來獲得平均等等等,但我不知道如何編碼。你不必爲我編寫整個代碼,因爲我知道我沒有太多的東西,但是如果有人能夠指出我正確的方向/給我一個關於如何進行的提示,那將會非常有幫助。

data_file = open("data.txt", "r") 

total = 0 
for line_str in data_file: 
    line_str = line_str.strip() 
    total+=1 
+0

您可以使用標準的'csv'模塊讀取的文本文件。 – AChampion

+1

這聽起來很像你要求我們做你的功課。如果是這樣,你應該與你的教授覈對這是否代表學術誠信問題。 – coderanger

+0

@coderanger我不是。我從字面上說不要爲我編寫代碼。我只是想要一個正確的方向... – Nora

回答

2

你需要的方法是str's split()。它接受一個字符串,就像文件中的一行一樣,並將其分解爲多個塊。之後,您還需要使用float()來解析字符串塊中的浮點數。

+0

我如何確保我只拆分數字?這是我的主要困境 – Nora

+0

@NouraAsrar你到目前爲止嘗試過什麼?你有沒有試過運行'.split()'就行了,看看你得到了什麼?這是python,你可以輕鬆啓動一個repl和實驗! – swalladge

+0

你不這樣做,你將整行分割成一個列表,然後拉出列表中的第三個項目。 – coderanger

1

隨着Pandas庫解決方法很簡單:

import pandas as pd 

df = pd.read_csv("data.txt", delim_whitespace=True) 
df['BMI'] = df['Weight(kg)']/(df['Height(m)']**2) 
df.describe() 
+0

我不允許使用這種方法 – Nora

0

你的問題可以通過這種方式來解決:

data_file = open("data.txt", "r")` 

total = 0 

for line_str in data_file:  
     [float(s) for s in line_str.split() if s.isdigit()] 
+0

這既不是有效的Python代碼(因爲胭脂倒退),也沒有完成任何事情:) – coderanger