Python:为什么';t.strip()处理整个文件?

Python:为什么';t.strip()处理整个文件?,python,python-3.x,file,dictionary,strip,Python,Python 3.x,File,Dictionary,Strip,所以我有一个大的文本文件(一本书),但我试图去除整个文本文件中的标点符号、特殊字符和空白,这样我就可以形成一个包含所有单词的词典。由于某种原因,当我使用.strip()方法时,它实际上什么都不做 with open(filename, 'r') as file: entire = file.read() entire = entire.lower() #lower case the entire text (this works) entire = entire.stri

所以我有一个大的文本文件(一本书),但我试图去除整个文本文件中的标点符号、特殊字符和空白,这样我就可以形成一个包含所有单词的词典。由于某种原因,当我使用.strip()方法时,它实际上什么都不做

with open(filename, 'r') as file:
    entire = file.read()
    entire = entire.lower() #lower case the entire text (this works)
    entire = entire.strip(string.punctuations + string.digit) #this however does nothing

如何剥离整本书中的标点符号和数字,以便构建词典?

str.strip
不会超出字符串的末尾。例如:

>>> 'abcXYZabcXYZbca'.strip('abc')
'XYZabcXYZ'
您可以改为构建翻译表并使用
str.translate

>>> import string
>>> table = str.maketrans({c: None for c in string.punctuation + string.digits})
>>> "Foo bar's baz, 123 abc".translate(table)
'Foo bars baz  abc'

str.strip
不会查看字符串的两端。例如:

>>> 'abcXYZabcXYZbca'.strip('abc')
'XYZabcXYZ'
您可以改为构建翻译表并使用
str.translate

>>> import string
>>> table = str.maketrans({c: None for c in string.punctuation + string.digits})
>>> "Foo bar's baz, 123 abc".translate(table)
'Foo bars baz  abc'

您可以使用
str.translate()
删除字符:

import string

table = {ord(k) : None for k in string.punctuation + string.digits}
with open(filename, 'r') as f:
    entire = f.read().lower() #lower case the entire text (this works)
    entire = entire.translate(table)

table
通过将字符映射到
None
来指定要删除的字符。词典理解用于构造
。然后调用
str.translate()
执行删除操作。

您可以使用
str.translate()
删除字符:

import string

table = {ord(k) : None for k in string.punctuation + string.digits}
with open(filename, 'r') as f:
    entire = f.read().lower() #lower case the entire text (this works)
    entire = entire.translate(table)

table
通过将字符映射到
None
来指定要删除的字符。词典理解用于构造
。然后调用
str.translate()
执行删除操作。

因为它不应该这样做。你认为它为什么要这么做?你不会发现任何教程或文档声称这样的事情。刚刚开始用python编程,所以它对我来说有点陌生,希望你能深入了解如何解决这个问题!干杯!:)我投票将这个问题作为主题外的问题结束,因为SO property不是一个文档网站。
string.标点符号+string.digit
应该是
string.标点符号+string.digits
(不是说那一行可以做你想做的事),因为它不应该这样做。你认为它为什么要这么做?你不会发现任何教程或文档声称这样的事情。刚刚开始用python编程,所以它对我来说有点陌生,希望你能深入了解如何解决这个问题!干杯!:)我投票将这个问题作为离题题题来结束,因为SO property不是一个文档网站。
string.标点符号+string.digit
应该是
string.标点符号+string.digits
(并不是说那一行可以做你想做的事情)我不知道Python 3中的
str.translate
在没有
str.maketrans
的情况下可以工作,谢谢。@Blender:是的,但我最初有一个错误:为了有效,表必须将Unicode序号映射到
None
str.maketrans()
可以这样做,或者你可以在听写理解中使用
ord()
。这正是
str.maketrans
所做的。我猜
str.translate
只是忽略了无效的键。我不知道在Python 3中
str.translate
没有
str.maketrans
的情况下,
str.maketrans()
可以这样做,或者你可以在听写理解中使用
ord()
。这正是
str.maketrans
所做的。我猜
str.translate
只是忽略了无效键。