Python字符串替换错误
我有一个python脚本不断返回以下错误: TypeError:replace()至少接受2个参数(给定1个) 我一辈子都搞不清楚这是什么原因造成的 以下是我的部分代码:Python字符串替换错误,python,string,replace,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
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'
应该看起来像
,如果您指的是python中的(字符串)inbuild函数,那么
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("'])", "")
我认为这应该行得通
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
)。有两种方法可以调用replace
让我们从定义一个字符串开始:
In [19]: s = "set([u'"
我们可以调用strings
的replace
方法:
In [20]: s.replace("u'", "")
Out[20]: 'set(['
或者,我们可以调用类str
的replace
:
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("'])", "")
首先,请注意,目标是替换行
中的文本,但在替换
的调用中,变量行
不用于任何内容
第一次调用replace将生成错误:
>>> str.replace("set([u'", "")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: replace() takes at least 2 arguments (1 given)
换句话说,它认为set([u'
是要操作的字符串,而replace函数只有一个参数:空字符串。这就是为什么消息replace()需要至少两个参数(1个参数)
您需要操作变量行
:
line = line.replace("set([u'", "")
依此类推循环中的其余行。您可以压缩
replace
代码的四行
str = str.replace("set([u'", "")
str = str.replace("'", "")
str = str.replace("u'", "")
str = str.replace("'])", "")
作为
示例:
>>> import re
>>> string = "foo set([u'bar'foobaru''])"
>>> string = re.sub(r"set\(\[u'|u'|'\]\)|'", r"", string)
>>> string
'foo barfoobar'
这就是您想要做的:
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.
我修改了您的代码如下:
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
结论:你有两个问题:
- 错误:str.replace的语法错误
- 滥用:Python保留键
str
str.replace的语法错误
对于errorTypeError:replace()至少接受2个参数(给定1个)
根本原因是:
你的代码
str=str.replace(“设置([u')”))
意图是用str.replace
做替换工作
正确的(一)语法是:
newStr=oldStr.replace(fromStr,toStr[,replaceCount])
对应于您的代码,可以是:
replacedLine=line.replace(“设置([u'”))
注意:另一种语法是:
newStr=str.replace(oldStr,fromStr,toStr[,replaceCount])
详情请参阅
滥用:Python保留密钥str
- 背景知识
str
是Python保留的关键字
- 表示:Python 3中字符串类的名称
str
具有许多内置功能
- 例如:
- 也就是说:您应该不使用
str
作为普通变量/函数
名称
因此,您的代码:
对于处理器中的行:
str=str.replace(“设置([u')”))
应改为(类似以下内容):
对于处理器中的行:
换行符=行。替换(“设置([u'”))
或
对于处理器中的行:
换行符=str.replace(第行,“设置([u'”)”)
1st使用str
由于varibale的实用性很差,str
是内置函数
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