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

时间:2017-03-20 13:42:39

标签: linux python-3.x file-io append text-formatting

我有一个我正在处理的小蟒蛇脚本,它会将本地天气状况和一些网络信息添加到我的.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()

2 个答案:

答案 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很陌生,我可以想象有一种更有效的方式来编写它,所以如果有人关心批评那将是非常棒的。谢谢大家!