Python3 - 从文件中删除最后(n)行并追加新数据

Python3 - 从文件中删除最后(n)行并追加新数据

问题描述:

我有一个小小的python脚本,我正在处理这个脚本,它会将当地的天气状况和一些网络信息添加到我的.bashrc文件中。一切正常,除了两个错误:第一,而不是删除旧数据和附加它只是追加像这样的新数据,新的:Python3 - 从文件中删除最后(n)行并追加新数据

(“回声[本地天气]:”,66.9“F” ,'with','overcast clouds') ('echo你的公共IP地址:','xxxx'('echo [Local weather]:',66.9,'F','with','阴云') (' 回波[您的公开IP是]:”, 'XXXX')

和第二I需要从印刷文本下降的格式,例如(括号,逗号等),以便该字符串显示为:

回声[本地天气]:66.9F与阴云
回声[公共IP]:XXXX

这里是我的脚本的文件操作部分:

with open('HOME/.bashrc', 'a') as f: 
     w = "echo [Local weather]:", wx_t,"F", "with", wx_c 
     i = "echo [Your public IP is]:", ip 
     out = [str(w), str(i)] 
     f.write('\n'.join(out)[0:-3]) 

,所以我想f.write('\n'.join(out)[0:-3])会删除文件的最后3行,但显然它会删除该字符串的最后3个字符。我需要改变以实现我所尝试的目标?我应该使用f.writelines()而不是f.write()

预期的结果最终会是这样的:

欢迎[主机名]您登录为用户[some_user]
[当地时间]:星期一3月20日8点28分32秒CDT 2017年。
[本地天气]:66.56 f控制晴朗的天空
[本地IP]:192.168.XX [公共IP]:XXXX

提前感谢,如果这是一个重复的问题,我apologiz即我觉得我已经尽了我的努力寻找解决方案,但我一直没有成功。

UPDATE: 所以我固定的格式,通过改变

w = "echo [Local weather]:", wx_t,"F", "with", wx_c

w = "echo [Local weather]: " + str(wx_t) + " F, with " + wx_c

并使用f.writelines()代替f.write()。我还删除了由DeepSpace建议的f.close()

+0

请注意,由于使用了'with',因此不需要调用'f.close()'。 – DeepSpace

+0

谢谢。我对python仍然很陌生,不确定如此想法,我会安全地玩 –

第一个错误是由在第一行使用'a'而不是'w'造成的。这导致Python添加到文件而不是覆盖文件。

,因为要加入所有的数据转换为字符串,并获得了参加字符串[0:-3],而不是名单out[0:-3]第二个错误是造成的。

您的代码,固定的,应该是这样的:

with open('HOME/.bashrc', 'w') as f: 
     w = "echo [Local weather]:", wx_t,"F", "with", wx_c 
     i = "echo [Your public IP is]:", ip 
     out = [str(w), str(i)] 
     f.write('\n'.join(out[0:-3])) 

感谢费利克斯对他的建议,但实施他的代码删除,需要保持不变的文件的一部分。我想我应该在发布这个问题之前进一步研究,因为在找到这个链接"delete final line in text file with python"之后,我能够找到解决方案。

这里是固定的代码按预期执行:

out_file = (home+('/scripts/python/working/weather01')) 
rf = open(out_file, 'r') 
lines = rf.readlines() 
rf.close() 

f = open(out_file, 'w') 
f.writelines([item for item in lines[:-2]]) 

w = "echo [Local weather]: " + str(wx_t) + " F, with " + str(wx_c) 
i = "echo [Your public IP is]: " + ip 
out = [str(w), str(i)] 
f.writelines('\n'.join(out)) 
f.close() 

因为我很新的Python我能想象有写本,因此,如果有人关心,以批判会更有效的方法太棒了。谢谢大家!