我有一个我正在处理的小蟒蛇脚本,它会将本地天气状况和一些网络信息添加到我的.bashrc文件中。一切都按预期工作,除了两个错误:首先,而不是删除旧数据并附加新数据,只需附加新数据:
(' echo [Local weather]:',#66;' F',' with','阴云') (' echo [您的公共IP是]:',' xxxx'(' echo [本地天气]:',66.9,' F& #39;,'与','阴云') (' echo [您的公共IP是]:',' x.x.x.x')
第二,我需要从打印文本中删除格式,例如(括号,逗号等),以便字符串显示为:
回声[当地天气]:66.9F阴云密布 echo [Public IP]:x.x.x.x
以下是我的脚本的文件操作部分:
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()
吗?
预期结果最终将如下所示:
欢迎使用[hostname]您以[some_user]用户身份登录 [当地时间]:Mon Mar 20 08:28:32 CDT 2017.
[当地天气]:66.56 F,天空晴朗 [本地IP]:192.168.x.x [公共IP]:x.x.x.x
提前致谢,如果这是一个重复的问题,我道歉。我觉得我在寻找解决方案方面做了尽职尽责,但我没有成功。
更新: 所以我通过更改
来修复格式 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 :(得分:0)
第一个错误是由第一行中使用'a'
而不是'w'
引起的。这会导致Python添加到文件而不是覆盖文件。
导致第二个错误是因为您要将所有数据加入字符串,并获取加入字符串的[0:-3]
,而不是列表[0:-3]
的{{1}}。
您的代码已修复,应如下所示:
out
答案 1 :(得分:0)
感谢Felix的建议,但是实现他的代码删除了需要保持不变的文件部分。我想在发布这个问题之前我应该进一步研究,因为在找到这个链接后"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很陌生,我可以想象有一种更有效的方式来编写它,所以如果有人关心批评那将是非常棒的。谢谢大家!