我正在尝试从python中不需要的字符串中删除一些字符,但据我所知,替换函数应该可以正常工作但不是:(
Btw(这只是一个简单的wordcount函数)
代码
fileName = "simple.txt"
inputFile = open(fileName, "rb")
wordCount = {}
for line in inputFile:
splitted = line.split(" ")
for word in splitted:
word.replace('\n','') #It's not removing this chars from words
word.replace('?','') #Nor this ones
if word in wordCount:
wordCount[word] = wordCount[word] + 1
else:
wordCount[word] = 1
print wordCount
输入
一个男人走多少路必须先叫你一个男人?怎么样 在她睡在沙滩之前,许多海洋必须是白色的鸽子吗?是, 在他们永远存在之前,炮弹必须飞多少次 禁止?我朋友在风中吹来的答案答案是 在风中吹来。
是的,一座山可以存在多少年才能被它淹没 海?是的,有些人可以存在多少年才被允许 是免费的?是的,一个男人可以转过头多少次假装他 只是看不到?答案是我的朋友在风中吹来的 答案在风中吹响。
是的,男人必须多少次抬头才能真正看到他 天空?是的,一个人必须拥有多少只耳朵才能听到别人的声音 哭?是的,在知道太多人之前需要多少人死亡 人死了?答案是我的朋友在风中吹来的 答案在风中吹响。
输出
{'ear':1,'是,':7,'允许':1,'知道\ n':1,'睡觉':1, '人':3,'海':1,'是':6,'\ n':2,'some':1,'it':1,'walk': 1,'如何':2,'看':1,“吹'':6,'有':1,'在':7,'道路':1, 'up \ n':1,'免费?\ n':1,'哭?\ n':1,'真':1,'一':1, '山':1,'他':4,'只':1,'到':2,“它是”:1,'死亡':1, 'wash':1,'head \ n':1,'how':7,'down \ n':1,'call':1,'take':1, '假装':1,'回答':6,'有\ n':1,'白':1,'必须':5, “不”:1,'朋友':3,'可':5,'是':1,'航行\ n':1,'他':1, 'wind \ n':3,'sea?\ n':1,'cannon':1,'until':1,'看?\ n':1, '风。\ n':3,'男人?\ n':1,'你':1,'禁止?\ n':1,'听':1,'也': 1,'天空?\ n':1,'The':6,'沙子?\ n':1,'鸽子':1,'他':1,'男':4, 'a':6,“他们是”:2,'永远':1,'球':1,'看':1,'飞\ n':1, '很多':10,'存在\ n':2,'时间':3,'将':1,'转':1,'死了?\ n': 1,'她':1,''':10,'年':2,'我的':3,'那':1,'之前':7}
谢谢!
答案 0 :(得分:5)
.replace()
返回更改后的字符串。存储返回值:
word = word.replace('\n','')
您可以链接替换呼叫:
word = word.replace('\n','').replace('?','')
字符串是不可变的,它们不能就地更改。
最后但并非最不重要:使用collections.Counter()
来计算字数,它提供了许多其他功能,可以更轻松地处理频率计数:
from collections import Counter
with open(fileName, "rb") as inputFile:
wordCount = Counter(w.replace('?', '')
for line in inputFile for w in line.split())
用一行创建wordCount
结构。请注意,.split()
将有效地为您删除额外的空格和换行符。
请注意,如果要从单词的开头或结尾删除标点符号,则应该使用.strip()
method代替:
wordCount = Counter(w.strip('.,:?')
for line in inputFile for w in line.split())
.strip('.,:?')
将删除参数中列出的开头或结尾的所有字符。
答案 1 :(得分:1)
string.replace
不是就地操作,它返回一个值(新字符串)。因此,您需要这样做:
word = word.replace('\n', '')
还有一件事:
没有任何参数的 string.split()
会自动拆分所有空白,因此如果删除" "
,则不必在第一个.replace('\n', '')
中执行{{1}}的地方。
答案 2 :(得分:1)
python中的字符串是不可变的。这意味着您不会使用其方法修改字符串,而是替换返回新的字符串值等方法,然后您必须将这些值存储在变量中。
更具体地说,这意味着给定一个字符串s:
s = 'Some string'
然后
s.replace('string','hello')
只需返回字符串'Some hello',但该值只是被丢弃而s仍然是'Some string'。要修改s,您必须将返回的变量显式地存储在s中,如下所示:
s = s.replace('string','hello')
现在是'有人问好'。
答案 3 :(得分:0)
正如我所看到的,一种温和的方法是写一个函数:
def remove_words (word, *to_replace):
for replace_word in to_replace:
word = word.replace(replace_word, '')
return word