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

Ken*_*Ken 0 python regex

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

jokes.txt:

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

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

当我运行这个Python脚本时:

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

数字仍然存在,它会像这样附加:

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

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

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

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

Rob*_*tts 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)
Run Code Online (Sandbox Code Playgroud)

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