Python str () - укажите, какие цитаты добавить / использовать? - PullRequest
1 голос
/ 11 декабря 2011

Есть ли способ повлиять на тип кавычек, которые python использует при приведении кортежа / списка к строке?

Для некоторых программ НЛП я получаю кортежи примерно так:

("It", ("isn't", "true"))

Я хочу привести его к строке и просто удалить все двойные кавычки и запятые:

(It (Isn't true))

Тем не менее, python разбирается с кавычками, похоже, предпочитает одинарные кавычки:

>>> print str(("It", ("Isn't" ,"true")))
('It', ("Isn't", 'true'))

, что усложняет мою жизнь. Конечно, я мог бы написать свою собственную функцию для распечатки ее по частям, но есть так много общего между представлением и нативным кортежем Python.

Ответы [ 3 ]

5 голосов
/ 11 декабря 2011

Вы не можете полагаться на точное представление, которое использует repr. Я бы просто сделал, как вы думали, и написал бы свою собственную функцию - я не вижу, чтобы это было больше, чем несколько строк кода. Это должно помочь вам.

def s_exp(x):
    if isinstance(x, (tuple, list)):
        return '(%s)' % (' '.join(map(s_exp, x)))
    return str(x)

Написание вашей собственной функции может быть неизбежным: если ваши строки содержат скобки "(", ")" или пробелы "", то вам потребуется некоторая форма экранирования для получения правильно сформированных s-выражений.

1 голос
/ 11 декабря 2011

Возможно, вы можете использовать вместо JSON

>>> import json
>>> print json.dumps(("It", ("isn't", "true")))
["It", ["isn't", "true"]]
0 голосов
/ 11 декабря 2011

Объекты Python имеют метод __str__, который преобразует их в строковое представление. Это то, что делает преобразование, и это достаточно разумно, чтобы использовать один вид кавычек, когда другой используется в строке, а также делать экранирование, если используются оба.

В вашем примере It получил одинарные кавычки, поскольку именно это "предпочитает" Python. Двойная кавычка была использована для Isn't, так как она содержит `.

Тебе стоит развернуть свой собственный конвертер. Используя небольшую рекурсию, она должна быть довольно маленькой.

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