Python字符串替换错误

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

我有一个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'
应该看起来像

,如果您指的是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'"
我们可以调用string
s
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的语法错误
对于error
TypeError: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