【问题标题】:Python3 - Remove last (n) lines from file and append new data [duplicate]Python3 - 从文件中删除最后(n)行并附加新数据[重复]
【发布时间】:2017-03-20 13:42:38
【问题描述】:

我正在编写一个 Python 小脚本,它将本地天气条件和一些网络信息添加到我的 .bashrc 文件中。除了两个错误之外,一切都按预期工作:首先不是删除旧数据并附加新数据,而是像这样附加新数据:

('echo [当地天气]:', 66.9, 'F', 'with', '阴云密布') ('echo [你的公网IP是]:', 'x.x.x.x'('echo [本地天气]:', 66.9, 'F', 'with', '阴云') ('echo [Your public IP is]:', 'x.x.x.x')

其次,我需要从打印的文本中删除格式,例如(括号、逗号等),以便字符串如下所示:

回声 [当地天气]:66.9F,多云
echo [公共 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] 用户身份登录
[当地时间]:2017 年 3 月 20 日星期一 08:28:32 CDT。
[当地天气]: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()

【问题讨论】:

  • 附带说明,您无需致电f.close(),因为您使用的是with
  • 谢谢。我对 python 还是很陌生,不确定我是否会安全地玩它

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


【解决方案1】:

第一个错误是由在第一行使用'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]))  

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 2017-07-16
    • 2021-09-17
    • 1970-01-01
    • 2018-07-20
    • 2017-09-01
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多