我一直在尝试使用Python脚本从以下行中删除编号.
jokes.txt:
很难向双关语者解释双关语,因为他们总是从字面上理解事物.
我曾经认为大脑是最重要的器官.然后我想,看看有什么告诉我的.
当我运行这个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)
数字仍然存在,它会像这样附加:
很难向双关语者解释双关语,因为他们总是从字面上理解事物.
我曾经认为大脑是最重要的器官.然后我想,看看有什么告诉我的.很难向双关语者解释双关语,因为他们总是从字面上理解事物.ഀഀ2.我曾经认为大脑是最重要的器官.然后我想,看看有什么告诉我的.
我想正则表达式会re.sub("\d+\. ", "", modfile)找到所有数字,0-9并用空字符串替换它.
作为一个新手,我不知道我搞砸了哪里.我想知道为什么会发生这种情况以及如何解决这个问题.
您已经打开了文件进行读写,但是在您阅读完文件之后,您就开始编写而没有指定要写入的位置.这导致它开始写你不读的地方 - 在文件的末尾.
除了关闭文件并重新打开它只是为了写,这是一种写入文件的方法:
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.笑话本身的东西,那么开头的数字将被删除,但不会被笑话中的数字删除.