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()
第一个错误是由在第一行使用'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我能想象有写本,因此,如果有人关心,以批判会更有效的方法太棒了。谢谢大家!
请注意,由于使用了'with',因此不需要调用'f.close()'。 – DeepSpace
谢谢。我对python仍然很陌生,不确定如此想法,我会安全地玩 –