【问题标题】:python replace multiple string in a text filepython替换文本文件中的多个字符串
【发布时间】:2022-02-01 11:52:07
【问题描述】:

我有一个包含以下信息的文本文件:

 network={
      ssid="WIFI_SSID"
      scan_ssid=1
      psk="WIFI_PASSWORD"
      key_mgmt=WPA-PSK
}

我想修改此文本文件并更改 ssid 和 psk 值。所以我想要这样的东西:

network={
      ssid="KB150"
      scan_ssid=1
      psk="testpass"
      key_mgmt=WPA-PSK
}

我写了这段代码,但它只能在文件末尾添加一个新行,仅用于 ssid(类似于 ssid= KB150):

if __name__ == '__main__':
    ssid = "KB150"
    password = "testpass"
    with open("example.txt", 'r+') as outfile:
        for line in outfile:
            if line.startswith("ssid"):
                sd = line.split("= ")
                outfile.write(line.replace(sd[1], ssid))
            if line.startswith("password"):
                pw = line.split("= ")
                line.replace(pw[1], password)
                outfile.write(line.replace(pw[1], ssid))

    outfile.close()

每当用户在我的程序中输入输入时,ssid 和 psk 的值都会发生变化,因此我需要找到以这些关键字开头的行并更改它们的值。

【问题讨论】:

    标签: python string replace text-files str-replace


    【解决方案1】:

    由于文件很小,您可以完全读取它,进行替换并回写。您不必像 with 处理它那样显式关闭它。

    if __name__ == '__main__':
        ssid = "KB150"
        password = "testpass"
        # open for reading
        with open("example.txt", 'r') as infile:
            content = infile.read()
        # reopen it for writing
        with open("example.txt", 'w') as outfile:
            content = content.replace("WIFI_SSID", ssid).replace("WIFI_PASSWORD", password)
            outfile.write(content)
    

    读取时修改文件很棘手。讨论here

    编辑

    有多种方法可以处理它。您可以保留包含内容的模板文件。

    network={
    
          ssid="WIFI_SSID"
          scan_ssid=1
          psk="WIFI_PASSWORD"
          key_mgmt=WPA-PSK
    }
    

    脚本可以读取模板文件的内容,替换ssid和密码,写入目标文件。

    另一种方法是使用正则表达式替换

    import re
    if __name__ == '__main__':
        ssid = "KB150"
        password = "testpass"
    
        with open("example.txt", 'r') as infile:
            content = infile.read()
    
        # reopen it for writing
        with open("example.txt", 'w') as outfile:
            content = re.sub('ssid="[^"]*"', f'ssid="{ssid}"', content)
            content = re.sub('psk="[^"]*"', f'psk="{password}"', content)
            outfile.write(content)
    

    【讨论】:

    • 有用的提示。谢谢。但是我需要多次更改这个文件,每次我想连接到wifi时,我需要找到以“ssid”和“password”开头的一行并更改它们,这些值不固定。
    【解决方案2】:

    我猜你的 line.startswith("ssid") 没有返回 True,因为在你的 example.txt 中是“ssid”之前的空格。因此,您可能需要考虑使用适当数量的空格分割行或在每一行中搜索 ssid。

    【讨论】:

    • 我在这里的示例中进行了一些更改。在我的文本文件中,我只创建了一个包含如下两行的文件:---- ssid="WIFI_SSID" password="WIFI_PASSWORD" ---- 仍然无法更改它们的值。
    • @Shanavas M 比我快!
    【解决方案3】:

    感谢 Shanavas M(在我脑海里有他有用的提示),我的朋友帮助了我,我终于得到了我想要的东西:)

    fileName = 'example.txt'
        result = ""
        ssid = "KB150"
        password = "testpass"
    
        with open(fileName, 'r') as filehandle:
            for line in filehandle:
                temp = line.split('=')[0]
                if temp == "ssid ":
                    result += 'ssid = "{}"\n'.format(ssid)
                elif temp == 'password ':
                    result += 'password = "{}"\n'.format(password)
                else:
                    result += line
    
        with open(fileName, 'w') as filehandle:
            filehandle.write(result)
    
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2017-08-01
    • 2012-06-24
    • 1970-01-01
    • 2019-01-07
    • 2021-05-19
    • 2018-04-04
    相关资源
    最近更新 更多