Я получаю TypeError: первый аргумент должен быть строкой или скомпилированным объектом, когда я почти уверен, что первый объект моего re.sub - PullRequest
0 голосов
/ 06 мая 2019

В настоящее время я пишу программу для изменения значений смещения для робота, и эти значения сохраняются в программе в текстовом виде. Мне удалось получить большую часть функциональности, но у меня возникли проблемы с этой последней функцией. Это метод re.sub. Я получаю сообщение об ошибке:
поднять TypeError («первый аргумент должен быть строкой или скомпилированным шаблоном») TypeError: первый аргумент должен быть строкой или скомпилированным шаблоном.

Однако мне кажется, что первый аргумент - это скомпилированный шаблон. Могу воспользоваться некоторой помощью, пытаясь выяснить это, если у кого-нибудь есть какой-либо совет Вот часть, которая имеет проблему. Это функция submit_x_offset. Также кажется, что он удаляет весь файл, а также тот же оператор регулярного выражения прекрасно работает в find_x_offset, где он в данный момент не скомпилирован.

import os
import tkinter as tk
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
import re


class Controller(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)
        container.grid(row=0, column=0, columnspan=6, sticky=W)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (ChooseFile, GusToPlateRight, GusToPlateLeft):

            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky=NSEW)

        self.show_frame(ChooseFile)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()


class ChooseFile(tk.Frame):

    def open_file(self):
        global filename

        file.delete('1.0', END)

        userentry_fname.delete('0', END)

        f_types = [("FLW Programs", "*.ls"), ("Text Files ", "*.txt")]

        filename = filedialog.askopenfilename(filetypes=f_types)

        userentry_fname.insert(END, filename)

        my_file = open(filename).read()

        file.insert(END, my_file)

    def clear_file(self):
        file.delete('1.0', END)
        userentry_fname.delete('0', END)

    def find_x_offsets(self, xoffset_match):
        # global matches

        xoffset_match.delete('1.0', END)
        with open(filename, 'r') as text:
            string = text.read()
            matches = re.search(
                r'!GUSSET TO BACKPLATE RIGHT GUS 1.*PR\[GP1:2,1:OFFSET\]=([^; ]*)(?!ENDFOR).*ENDFOR.*', string,
                re.M | re.DOTALL)
            print(matches.group(1))

            xoffset_match.insert(END, matches.group(1))

    def submit_x_offsets(self, set_xoffset):
        text_to_replace = set_xoffset.get()
        offset_to_change = re.compile(
            r'!GUSSET TO BACKPLATE RIGHT GUS 1.*PR\[GP1:2,1:OFFSET\]=([^; ]*)(?!ENDFOR).*ENDFOR.*', re.M | re.S).groups

        with open(filename, 'r') as text:
            string = text.read()
        with open(filename, 'w') as file:
            string = re.sub(offset_to_change, text_to_replace, string)
            file.write(string.group(1))

1 Ответ

0 голосов
/ 06 мая 2019

Я думаю, что объяснил это неправильно. Я хочу выложить ту же строку, которую я искал в find_x_offset. Мне нужно заменить один номер другим. Функция поиска у меня работает просто отлично. Без вопросов. Мне нужна саб или заменить функцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...