TypeError:期望的字符串或缓冲区

时间:2017-08-08 11:21:12

标签: python spintax

在黑帽世界论坛上找到以下代码,但是当我执行它时,我收到了这个错误:

print spin(text) 
 File "C:\Users\test.py", line 30, in spin 
text, n = r.subn(_select, text) 
TypeError: expected string or buffer

代码:

text1 = open("C:\Users\spintaxtext.txt", "r")
text= text1.readlines()    
def get_random(arr):
    return arr[random.randrange(0,len(arr))]

def _select(m):
    choices = m.group(1).split('|')
    return choices[random.randint(0, len(choices)-1)]


def spin(text, tokens=None):
    r = re.compile('{([^{}]*)}')
    while True:
        text, n = r.subn(_select, text)
        if n == 0: break
    if tokens:
        text = multi_replace(text, tokens)
    return text.strip()

def multi_spin(text, tokens=None, delimiter= '\n'):
    lines = text.strip().split(delimiter)
    line = get_random(lines)
    return spin(line, tokens)


def multi_replace(text, dic):
    pattern = "|".join(map(re.escape,dic.keys()))
    return re.sub(pattern,lambda m: dic[m.group()],text)

我不是编码员,有人可以帮助我找出问题所在吗? 谢谢

1 个答案:

答案 0 :(得分:0)

变化:

text= text1.readlines()

为:

text = text1.read()

说明:

re.subn(pattern, repl, string, count=0, flags=0)

您在这里传递字符串列表。