Строка внутри строки - PullRequest
       21

Строка внутри строки

1 голос
/ 06 апреля 2009
BASE_URL = 'http://foobar.com?foo=%s'

variable = 'bar'

final_url = BASE_URL % (variable)

Я получил это 'http://foobar.com?foo=bar' # Он игнорирует внутреннюю строку.

Но я хотел что-то вроде этого 'http://foobar.com?foo='bar''

Спасибо за ответ.

Можете ли вы помочь мне с почти той же проблемой:

lst = ['foo', 'bar', 'foo bar']

[str(l) for l in lst if ' ' in l] 

Я получаю ['foo bar'], но я хотел это как [''foo bar'']

Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 06 апреля 2009

Измените BASE_URL на

BASE_URL = "http://foobar.com?foo='%s'"

или

BASE_URL = 'http://foobar.com?foo=\'%s\''
6 голосов
/ 06 апреля 2009

Если вы работаете с параметрами URL, возможно, безопаснее использовать urllib.urlencode:

import urllib

BASE_URL = 'http://foobar.com/?%s'
print BASE_URL % urllib.urlencode({
   'foo': 'bar',   
})

Относительно цитат: почему вы явно хотите их? Обычно ваш HTTP-упаковщик будет обрабатывать все это для вас.

Относительно вашего второго вопроса: Если вы абсолютно хотите, чтобы в нем были кавычки, вам все равно придется либо избегать их при добавлении содержащейся строки, либо (вероятно, более безопасный способ сделать это) будет использовать repr (.. .)

lst = ['foo', 'bar', 'foo bar']
lst2 = []

for l in lst:
    if ' ' in l:
        lst2.append(repr(l))
3 голосов
/ 06 апреля 2009

Кажется, вы немного озадачены тем, как строковые литералы работают.

Когда вы говорите s = 'this is a string', вы присваиваете строку переменной. Какая строка? Ну, строковый литерал, который вы жестко закодировали в своей программе.

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

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

1 голос
/ 07 апреля 2009

Если вы хотите, чтобы в URL появлялись одинарные кавычки, вы можете использовать

BASE_URL = 'http://foobar.com?foo=%s'
variable  = "'bar'"
final_url = BASE_URL % (variable)

Но этот вариант довольно небезопасен, если переменная приходит откуда-то (например, пользовательский ввод).

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