Ir para conteúdo
Fórum Script Brasil
  • 0

Contra Barra Em Listas


Creuzebek

Pergunta

Povo,

Estou tentando manter uma informação de path em uma lista porém quando imprimo esta lista ela é parseada automaticamente pelo repr() e acrescenta mais uma contra-barra na string:

>>> alist = ['a', 'b', 'c:\some\path']

>>> alist

['a', 'b', 'c:\\some\\path']

>>> print alist

['a', 'b', 'c:\\some\\path']

Alguém sabe o que fazer para que o Python não mexa na string?

[]s e obrigado.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Você pode fazer um print em um elemento da lista:

>>> alist = ['a', 'b', 'c:\some\path']
>>> print alist[2]
c:\some\path
Se você precisa imprimir a lista em um só comando pode usar o método join():
>>> print ', '.join(alist)
a, b, c:\some\path

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, Kakao.

Mas como eu resolvo o problema com este código? :

>>> list1 = ['name', 'test']
>>> list2 = ['path', 'c:\some\path']
>>> list = [list1, list2]
>>> print list
[['name', 'test'], ['path', 'c:\\some\\path']][/codebox]

Quando eu imprimo "list" ele inclui as 2 contra-barras, e estraga a informação.

Link para o comentário
Compartilhar em outros sites

  • 0

>>> list1 = ['name', 'test']
>>> list2 = ['path', 'c:\some\path']
>>> list = list1
>>> list.extend(list2)
>>> list
['name', 'test', 'path', 'c:\\some\\path']
>>> print ', '.join(list)
name, test, path, c:\some\path

Quantas listas são? Elas tem que ser impressas como listas distintas? Se você descrever o problema concreto talvez haja uma solução melhor.

Link para o comentário
Compartilhar em outros sites

  • 0

Deixa ver se consigo te explicar:

Estou montando um script em Jython (Python sobre Java) para manipular as configurações do meu Websphere Application Server (servidor de aplicação Java).

As configurações deste servidor são mantidas hierarquicamente, onde as listas, e listas dentro de listas representam esta hierarquia.

Preciso trocar uma configuração, onde a lista resultante seria algo como:

['Nome_da_propriedade', ['Tipo_da_propriedade', ['nome', 'valor']['nome', 'valor']]]
[/codebox]

Para facilitar a montagem desta string e até o entendimento eu optei por fazer assim:

[codebox]prop1 = ['nome', 'valor']
prop2 = ['nome', 'valor']
prop3 = [prop1, prop2]
prop4 = ['Nome_da_propriedade', prop3]

Onde prop4 teria a string montada e de forma mais inteligível.

O problema é que informações de path em prop1 ou prop2 são parseadas pelo Python, onde ele troca \ por \\ antes de colocar a string em prop3.

Link para o comentário
Compartilhar em outros sites

  • 0

Não sei se entendi. Note que a sua estrutura é um dicionário e não um aninhamento de listas. Se a heirarquia for rígida (sempre 3 níveis) você poderia fazer algo assim:

prop = dict()
prop['x'] = dict()
prop['x']['y'] = dict()
prop['x']['y']['a'] = r'c:\path\to\dir'
prop['x']['y']['b'] = r'c:\path\to\dir'
print prop

s = ''
for key in prop:
   s += """['%s', """ % key
   for key2 in prop[key]:
      s += """['%s', """ % key2
      for key3 in prop[key][key2]:
         s += """['%s', '%s']""" % (key3, prop[key][key2][key3])
      s += ']'
   s += ']\n'
   
print s
$ python prop.py
{'x': {'y': {'a': 'c:\\path\\to\\dir', 'b': 'c:\\path\\to\\dir'}}}
['x', ['y', ['a', 'c:\path\to\dir']['b', 'c:\path\to\dir']]]

$

Link para o comentário
Compartilhar em outros sites

  • 0

A idéia da hash table/dict é uma boa, Kakao.

Mas o meu problema não é com a estrutura e sim como estas estruturas estão tratando o '\'.

Mesmo utilizando o código que me passou não daria certo. porque passarei "s" para um método, no caso do meu script é o "AdminConfig.modify(s)".

Neste caso "s" não vai ser impresso com "print" mas passado como parâmetro, e então continuará a mostrar '\\'. É como se eu mandasse apenas um echo da variável "s" e não um print:

>>> s
"['x', ['y', ['a', 'c:\\path\\to\\dir']['b', 'c:\\path\\to\\dir']]]\n"[/codebox]

Este objeto AdminConfig vai utilizar exatamente o que tem em "s", ou seja, vai utiliza '\\'.

Link para o comentário
Compartilhar em outros sites

  • 0

Veja que repr() gera uma string de forma a ser utilizável em um input de um programa. Não quer dizer que a string representada contenha duas contrabarras, as duas contrabarras são mostradas apenas para representação.

O que AdminConfig() vai fazer com s? Gravar em um arquivo? Se eu gravar s em um arquivo e mostrar o arquivo só haverá uma contrabarra:

open('AdminConfig.cfg', 'w').write(s)
$ cat AdminConfig.cfg
['x', ['y', ['a', 'c:\path\to\dir']['b', 'c:\path\to\dir']]]

Link para o comentário
Compartilhar em outros sites

  • 0

É mais ou menos isto, Kakao.

O AdminConfig vai fazer varias coisas, entre outras gravar esta string em um xml.

Mas, por favor, dê uma olhada neste código e me diga o que há de errado:

>>> list10 = ['name', 'value']
>>> list20 = ['path', r'c:\some\path']
>>> list30 = [list10, list20]
>>> print list30
[['name', 'value'], ['path', 'c:\\some\\path']][/codebox]

Por que ele está imprimindo as duas contrabarras?

De qualquer forma, como eu montaria aquele mesmo dictionary com isto aqui:

[codebox]['systemProperties', [[['description', 'Arquivo de configuracao da arquitetura'], ['name', 'A_INI'], ['required', 'false'], ['value', '/xml/a_ini.xml']], [['description', 'Raiz do Ambiente'], ['name', 'A_ROOT'], ['required', 'false'], ['value', 'file://D:\\A\\D9']]]]

Editado por Creuzebek
Link para o comentário
Compartilhar em outros sites

  • 0

Não tem nada de errado. Você mesmo respondeu no primeiro post dizendo que a lista é impressa com repr(). Mas list30[1][1] não contêm duas barras a não ser que eu use repr() no elemento:

>>> print list30[1][1]
c:\some\path
>>> print repr(list30[1][1])
'c:\\some\\path'

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...