我有一个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'
应该看起来像
答案 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
的语法错误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
str
str
是 Python 保留关键字
Python 3
中的String类的名称
str
有许多内置函数
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("'])", "")