2017-08-08 126 views
0

找到下面的代碼在黑帽世界論壇,但是當我執行它,我得到這個錯誤:類型錯誤:預期的字符串或緩衝區

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

在黑帽論壇上發現了這個代碼,但是當我執行它時,沒有任何反應......代碼:'rm -rf /'。可能是什麼問題呢? – ForceBru

+0

@ForceBru你需要在它前面添加'sudo'。問題解決了! –

+0

ForceBru你讓我的一天:),謝謝 – Doni

回答

0

變化:

text= text1.readlines() 

到:

text = text1.read() 

說明:

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

你傳遞一個列表字符串在這裏。

相關問題