使用Python中的正则表达式修改文件内容

时间:2014-05-09 17:42:02

标签: python regex

我一直在尝试使用Python脚本删除以下行中的编号。

jokes.txt

  
      
  1. 很难向双关语者解释双关语,因为他们总是从字面上理解。

  2.   
  3. 我曾经认为大脑是最重要的器官。然后我想,看   是什么告诉我的。

  4.   

当我运行这个Python脚本时:

import re
with open('jokes.txt', 'r+') as original_file:
    modfile = original_file.read()
    modfile = re.sub("\d+\. ", "", modfile)
    original_file.write(modfile)

这些数字仍在那里,它会像这样附加:

  
      
  1. 很难向双关语者解释双关语,因为他们总是从字面上理解。

  2.   
  3. 我曾经认为大脑是最重要的器官。然后我想,看看有什么告诉我的。很难解释双关语   kleptomaniacs因为他们总是从字面上理解。਍ഀ਍ഀ2。我曾经认为大脑是最重要的器官。然后我想,看看有什么告诉我的。

  4.   

我想正则表达式re.sub("\d+\. ", "", modfile)会找到0-9中的所有数字,并用空字符串替换它。

作为一个新手,我不确定我搞砸了哪里。我想知道为什么会发生这种情况以及如何解决它。

1 个答案:

答案 0 :(得分:5)

您已经打开了文件进行读写,但是在您阅读完文件之后,您就开始编写而没有指定要写入的位置。这导致它开始写你不读的地方 - 在文件的末尾。

除了关闭文件并重新打开它只是为了写,这是一种写入文件的方法:

import re
with open('jokes.txt', 'r+') as original_file:
    modfile = original_file.read()
    modfile = re.sub("\d+\. ", "", modfile)
    original_file.seek(0) # Return to start of file
    original_file.truncate() # Clear out the old contents
    original_file.write(modfile)

我不知道为什么数字仍然存在于你附加的部分,因为这对我来说效果很好。您可能希望在正则表达式的开头添加插入符号(^)(生成"^\d+\. ")。 Carets匹配一行的开头,使得如果你的一个笑话恰好在笑话本身中使用1.这样的东西,那么开头的数字将被删除,但不会删除笑话中的数字。