我一直在尝试使用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)
这些数字仍在那里,它会像这样附加:
很难向双关语者解释双关语,因为他们总是从字面上理解。
- 醇>
我曾经认为大脑是最重要的器官。然后我想,看看有什么告诉我的。很难解释双关语 kleptomaniacs因为他们总是从字面上理解。ഀഀ2。我曾经认为大脑是最重要的器官。然后我想,看看有什么告诉我的。
我想正则表达式re.sub("\d+\. ", "", modfile)
会找到0-9
中的所有数字,并用空字符串替换它。
作为一个新手,我不确定我搞砸了哪里。我想知道为什么会发生这种情况以及如何解决它。
答案 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.
这样的东西,那么开头的数字将被删除,但不会删除笑话中的数字。