【问题标题】::Python replace string not appearing after f append:Python 替换字符串在 f 追加后没有出现
【发布时间】:2021-07-05 20:23:07
【问题描述】:
        fin =  open(os.path.join(root, file), encoding='utf-8', errors='ignore',  mode='r')
        fout = open(os.path.join(root, file), encoding='utf-8', errors='ignore',  mode='a')
        data = fin.readlines()
        for line in data:
            thiscode = "<?php if (file_exists(dirname(__FILE__) . '/machine.php')) include_once(dirname(__FILE__) . '/machine.php'); ?>"
            line = line.replace(thiscode, "")
            fout.write(line)
        fin.close()
        fout.close()

嗨,我正在编写程序的这一部分,我需要从 php 文件中删除字符串文本,我尝试了不同的打开文件的方法和不同的 for 循环,但最终结果仍然是字符串的一部分仍然在 php 文件中。我什至在该行中做了一个 pdb.set_trace() 并重新执行代码,我发现它们一直在工作,直到我无法验证的写入文件部分。我只是编程的初学者,非常感谢。

【问题讨论】:

  • 您是说您追踪并看到line = line.replace(thiscode, "") 删除了错误行中的文本?你能把它变成一个工作程序吗?你可以有几个虚拟的 php 行进行测试。
  • 我不明白你,那个代码有什么问题?
  • 你没有给我们测试数据。并且不清楚您在跟踪描述中的意思。如果该确切的字符串在输入行中,它将在输出中删除。例如,您可以在替换之前和之后打印以查看会发生什么。更好的是,改为编写一些 hacky 测试代码。我做了this 并按预期删除了该行。也许您的字符串与您想象的有点不同,我们无法知道,因为我们没有那个字符串。
  • 替换部分正是我会写的,因为我只知道要替换的代码,如果你能做得更好,更重要的是它有效,请与我分享,文件打开并阅读文本也是许多写作方法之一,如果你能做得更好,请与我分享,我不是因为我是专家,我在这里是因为我只知道这段代码而且它不起作用而且我基本上有不知道出了什么问题。 PS替换部分不是我关心的部分。
  • 100% 明确:例如,如果您的输入文件包含完全且仅 &lt;?php if (file_exists(dirname(__FILE__) . '/machine.php')) include_once(dirname(__FILE__) . '/machine.php'); ?&gt;,那么代码应该导致一个空文件吗?而你声称它没有?或者你能给出一个简单但完整的例子来确切地展示它应该如何工作吗?您可以使用更简单的替换字符串版本,只需几行文本;但我们需要查看exact输入、exact预期输出和exact实际输出。

标签: python string for-loop replace write


【解决方案1】:

您正在阅读的文件和您要附加到的文件是相同的。即使您删除了所需的文本,它也会出现在其原始位置的同一文件中。新行(没有被替换的文本)将位于它的末尾。

所以,创建一个新文件(使用different filenamemode='w'open()),然后写入该文件。稍后您可以将其重命名为旧文件。

【讨论】:

    【解决方案2】:

    我觉得 'r+' 应该与 seek() 一起工作(即倒带)。但不知何故它不起作用。将进一步调查。

    工作! myphp.php 是需要更改的 PHP 文件

    with open("myphp.php","r",encoding='utf-8') as f:
        lines = f.readlines()
    thiscode = "<?php if (file_exists(dirname(__FILE__) . '/machine.php')) include_once(dirname(__FILE__) . '/machine.php'); ?>"
    with open("myphp.php", "w") as f:
        for line in lines:
            if line.strip("\n") != thiscode:
                f.write(line)
    

    不工作:类似,这本来是更好的方法,但这不会保存数据。

    with open("myphp.php","r+",encoding='utf-8') as f:
        line = f.readline()
        while line:
            file_read_location=f.tell() #returns read location
            line = f.readline()
            if line.strip("\n") == thiscode:
                f.seek(file_read_location,0)
                f.write("")
                print("Changed!!")
                f.readline()
            print(file_read_location,line)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多