Парсинг строки, которая представляет список кортежей

Похож на проблему поточной обработки.
Гипотеза : Возможно, у Вас есть основной поток и поток таймера, получающий доступ к этому управлению. Основной поток закрывается - называющий Управление. Расположите (), чтобы указать, что я сделан с этим Управлением, и я не выполню больше вызовов к этому. Однако поток таймера все еще активен - контекстное переключение к тому потоку, где это может назвать методы на том же управлении. Теперь управление говорит, что я Расположен (уже брошенный мои ресурсы), и я не буду больше работать. Исключение ObjectDisposed.

, Как решить это : В потоке таймера, перед тем, чтобы называть методы/свойства на управлении, делают проверку с

if ControlObject.IsDisposed then return; // or do whatever - but don't call control methods

ИЛИ останавливают поток таймера ПРЕЖДЕ, ЧЕМ расположить объект.

16
задан tosh 27 November 2009 в 18:33
поделиться

6 ответов

>>> import ast
>>> print ast.literal_eval("(8, 12.25), (13, 15), (16.75, 18.5)")
((8, 12.25), (13, 15), (16.75, 18.5))
24
ответ дан 30 November 2019 в 17:15
поделиться
def parse(s):
    tuples = s.split('), ')
    out = []
    for x in tuples:
        a,b = x.strip('()').split(', ')
        out.append((float(a),float(b)))
    return out

это должно сработать.

4
ответ дан 30 November 2019 в 17:15
поделиться

Я использовал safe_eval для подобных работ в прошлом.

2
ответ дан 30 November 2019 в 17:15
поделиться

Если вы работаете с файлом CSV и вам нужно нечто большее, чем «наивное» решение, которое не обрабатывает никаких ошибок, вам, вероятно, лучше всего использовать Python Модуль CSV .

1
ответ дан 30 November 2019 в 17:15
поделиться

Скачать PyParsing .

Я уже работал с ним раньше. Вы можете получить из него довольно надежное поведение синтаксического анализа, и я думаю, что он предоставляет встроенные функции, которые будут обрабатывать все ваши потребности в синтаксическом анализе с помощью такого рода вещей. Найдите commaSeparatedList и nestedExpr.

1
ответ дан 30 November 2019 в 17:15
поделиться

что плохого в том, чтобы делать это систематически? разделить на ")", затем просмотреть список, удалить все "(".

>>> s="(8, 12.25), (13, 15), (16.75, 18.5)"
>>> [ i.replace("(","") for i in s.split(")") ]
['8, 12.25', ', 13, 15', ', 16.75, 18.5', '']
>>> b = [ i.replace("(","") for i in s.split(")") ]
>>> for i in b:
...  print i.strip(", ").replace(" ","").split(",")
...
['8', '12.25']
['13', '15']
['16.75', '18.5']
['']

Теперь вы можете добавить каждый элемент в свою структуру данных.

1
ответ дан 30 November 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: