读取文件并更改其内容

时间:2015-04-12 14:49:00

标签: python python-3.x

我正在尝试编写一个从text.txt读取内容并将其更新版本写入同一文件的代码。 text.txt就是这样的:

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]]

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

1 个答案:

答案 0 :(得分:2)

您可以fileinput.input使用inplace=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.writerows写入数据:

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)