2017-01-04 24 views
0

我正在使用python的re模塊來查找文本文件中2個模式的所有實例。我有一個spinbox,它返回已被選中的值。如何使用str.replace從spinbox獲取值,然後在文本文件中替換該值的實例?

from tkinter import * 
import re 

root = Tk() 

num_names = open('numerical_sat_names.txt', 'r') 
num_file = num_names.read() 

satellite_TLE = open('TLE.txt', 'r') 
TLE_file = satellite_TLE.read() 
text = TLE_file 

choice_var = tk.StringVar()  

class FindTLE(tk.Frame): 
    pattern1 = r'(^.) (.....)(.) (........) (..)(............) (..........) (........) (........) (.) (....)(.$)' 
    pattern2 = r'(^.) (.....) (........) (........) (.......) (........) (........) (...........)(.....)(.$)' 

    multiline1 = re.compile(pattern1, re.MULTILINE) 
    multiline2 = re.compile(pattern2, re.MULTILINE) 
    print ('Multiline :') 
    for match in multiline1.findall(text): 
     print (' %r' % (match,)) 
    if not pattern1: 
     raise TypeError('Bad line1 %s' % multiline1) 
    print ('Multiline2 :') 
    for match in multiline2.findall(text): 
     print (' %r' % (match,)) 
    if not pattern2: 
     raise TypeError('Bad line2 %s' % multiline2) 

def TLE_selected(): 
    selected = str(choice_var.get()) 
    print('selected :', selected) 
    str.replace('.....U', selected[1]) 


TLE_spinbox=tk.Spinbox(textvariable=choice_var, values=num_file, 
        command=TLE_selected) 
TLE_spinbox.pack() 

root.mainloop() 

我希望spinbox的值替換文本文件中的內容; 'TLE.txt';也就是(..... U)。但是我得到的類型錯誤:

str.replace('.....U', selected[1]) 
TypeError: replace() takes at least 2 arguments (1 given) 

的(「..... U」)應與‘模式1’的部分對應,並按照同樣的結構已被選中。

我對python很新穎,因此希望得到一些關於我在做什麼錯誤的指導,以及如何解決這個問題。

+0

你沒有任何方法來創建類'FindTLE' - 這是沒有意義的 - 你可以創建功能,並得到同樣的結果 – furas

+0

'replace'即可。在兩個方法中使用''Hello「.replace(」H「,」h「)''需要兩個參數或'str.replace(」Hello「,」H「,」h「)'需要3個參數 - 這裏是你的問題。 – furas

+0

'choice_var'是'StringVar',它總是返回'string',所以你不需要'str()' – furas

回答

0

replace可以用於需要兩個參數或需要3個參數的str.replace(「Hello」,「H」,「h」)兩種方法的「Hello」.replace(「H」,「h」)。 - 這裏是你的問題

(由furas評論)

相關問題