在Python中从String中删除char

时间:2013-02-22 18:45:52

标签: python string replace char

我正在尝试从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}

谢谢!

4 个答案:

答案 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