Python字符串替换错误

时间:2014-11-13 05:25:57

标签: python string replace

我有一个python脚本,一直返回以下错误:

  

TypeError:replace()至少需要2个参数(给定1个)

我不能为我的生活找出造成这种情况的原因。

以下是我的代码的一部分:

inHandler = open(inFile2, 'r')
outHandler = open(outFile2, 'w')

for line in inHandler:

    str = str.replace("set([u'", "")
    str = str.replace("'", "")
    str = str.replace("u'", "")
    str = str.replace("'])", "")

outHandler.write(str)

inHandler.close()
outHandler.close()

在双引号中看到的所有内容都需要替换为任何内容。

所以set([u'应该看起来像

7 个答案:

答案 0 :(得分:3)

这是你想要做的:

for line in inHandler:
    line = line.replace("set([u'", "")
    line = line.replace("'", "")
    line = line.replace("u'", "")
    line = line.replace("'])", "")

outHandler.write(line)

在文档中,只要它显示str.replace(old,new[,count])之类的内容,str就是一个示例变量。实际上,str是一个内置函数,这意味着你永远不想通过将它赋给任何东西来改变它的含义。

line = line.replace("set([u'", "")
  ^This sets the string equal to the new, improved string.

line = line.replace("set([u'", "")
        ^ This is the string of what you want to change.

答案 1 :(得分:1)

有两种方法可以拨打replace

让我们从定义一个字符串开始:

In [19]: s = "set([u'"

我们可以调用字符串replace的{​​{1}}方法:

s

或者,我们可以拨打课程In [20]: s.replace("u'", "") Out[20]: 'set([' 的{​​{1}}:

replace

后一种方式需要三个参数,因为str。这就是您收到有关缺少参数的错误的原因。

出了什么问题

考虑代码:

In [21]: str.replace(s, "u'", "")
Out[21]: 'set(['

首先,请注意目标是替换str中的文字,但调用for line in inHandler: str = str.replace("set([u'", "") str = str.replace("'", "") str = str.replace("u'", "") str = str.replace("'])", "") 的任何地方都是用于任何事情的变量line

第一次替换调用会产生错误:

replace

在上面的表单中使用,line将其第一个参数解释为要替换的字符串。就像你写道:

>>> str.replace("set([u'", "")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: replace() takes at least 2 arguments (1 given)

换句话说,它认为str.replace是要操作的字符串,而replace函数只给出一个参数:空字符串。这就是消息为"set([u'".replace("") 的原因。

您需要的是对变量set([u'进行操作:

replace() takes at least 2 arguments (1 given)

等等循环中的剩余行。

答案 2 :(得分:0)

我认为这应该有效。

for s in inHandler:

    s = s.replace("set([u'", " ")  ## notice the space between the quotes
    s = s.replace("'", " ")
    s = s.replace("u'", " ")
    s = s.replace("'])", " ")

请不要将内置数据类型用作变量(就像您使用过str一样)。

答案 3 :(得分:0)

您可以压缩replace代码的四行

str = str.replace("set([u'", "")
str = str.replace("'", "")
str = str.replace("u'", "")
str = str.replace("'])", "")

如,

str = re.sub(r"set\(\[u'|u'|'\]\)|'", r"", str)

示例:

>>> import re
>>> string = "foo set([u'bar'foobaru''])"
>>> string = re.sub(r"set\(\[u'|u'|'\]\)|'", r"", string)
>>> string
'foo barfoobar'

答案 4 :(得分:0)

我修改了你的代码如下:

inHandler = open('test.txt', 'r')
outHandler = open('test1.txt', 'w')
data = ''
for line in inHandler.readlines():
    print 'src:' + line
    line = line.replace("set([u'", "")
    line = line.replace("u'", "")
    line = line.replace("'])", "")
    line = line.replace("'", "")
    data += line
    print 'replace:' + line
outHandler.write(data)

inHandler.close()
outHandler.close()

我测试了它。结果:

src:set([u'adg',u'dafasdf'])
replace:adg,dafasdf
src:set([u'adg',u'dafasdf'])
replace:adg,dafasdf
src:set([u'adg',u'dafasdf'])
replace:adg,dafasdf

答案 5 :(得分:0)

结论:你有两个问题:

  • 错误str.replace 的语法错误
  • 滥用:Python 保留键 str

错误:str.replace 的语法错误

对于错误 TypeError: replace() takes at least 2 arguments (1 given)

根本原因是:

您的代码

str = str.replace("set([u'", "")

意图是用str.replace做替换工作

正确的(一)语法是:

newStr = oldStr.replace(fromStr, toStr[, replaceCount])

对应于您的代码,可能是:

replacedLine = line.replace("set([u'", "")

注意:另一种语法是:

newStr = str.replace(oldStr, fromStr, toStr[, replaceCount])

有关详细信息,请参阅another post's answer

滥用:Python 保留键 str

  • 背景知识
    • str 是 Python 保留关键字
      • 表示:Python 3中的String类的名称
      • 也意味着:您应该NOT使用str作为普通的variable/function名称

所以你的代码:

for line in inHandler:
    str = str.replace("set([u'", "")

应该改为(类似这样):

for line in inHandler:
    newLine = line.replace("set([u'", "")

for line in inHandler:
    newLine = str.replace(line, "set([u'", "")

答案 6 :(得分:-1)

如果你在python中引用str.replace(string)内置函数那么

str.replace(old, new[, count])
    Return a copy of the string with all occurrences of substring old replaced by new. 
    If the optional argument count is given, only the first count occurrences are replaced.

意味着您需要提供2个值。

您正在使用line作为变量,因此您可以尝试。

local_string = ''
for line in inHandler:
    local_string = line
    local_string = local_string.replace("set([u'", "")
    local_string = local_string.replace("'", "")
    local_string = local_string.replace("u'", "")
    local_string = local_string.replace("'])", "")