我正在尝试编写一个从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]]
有没有办法从更新的文件中排除重量和高度?
答案 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)