Iniciante - Comparar string dentro de um readline()

790 views
Skip to first unread message

Halyson Sampaio

unread,
Feb 18, 2013, 9:31:29 AM2/18/13
to python...@googlegroups.com
Olá

Sou inciante no python e preciso fazer um script que abra um .txt procure procure um elemento na linha, se achar ande x caracteres e altere um valor na linha:

Ex: encontrar as linhas que tem C100 e alterar a letra
C100|1|2|3|A|2
C500|1|2|3|A|2
C600|1|2|3|A|2
C100|1|2|3|B|2
C500|1|2|3|B|2
C100|1|2|3|C|2
C200|1|2|3|C|2
C250|1|2|3|C|2
C500|1|2|3|C|2
C100|1|2|3|D|2

estou lendo assim:
f = open( 'C:/texto.txt', 'r')
linha=f.readline()

minha ultima tentatica de procurar o elemento foi com find mas nao deu certo:
if linha.find("C100")>-1 :

Alguma dica?
Obrigado


Bruno Rocha

unread,
Feb 18, 2013, 9:38:18 AM2/18/13
to python...@googlegroups.com
if "C100" in linha:
    ....


vc também pode utilizar o módulo "re" para fazer isso com regexp

2013/2/18 Halyson Sampaio <halyson...@gmail.com>
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "python-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 

Joao S. O. Bueno

unread,
Feb 18, 2013, 10:19:14 AM2/18/13
to python...@googlegroups.com
Oi Halyson ---

tem vários detalhes no seu problema ai:

uam coisa é achar as linhas que você quer modificar - e a resposta do
Bruno Rocha ajuda nisso -

outra coisa é alterar as linhas e alterar o arquivo de volta - isso
requer um pouco mais de código.

Independente de voce estar começando a programar, ou se Python não é
sua primeira linguagem,
uma coisa é importante ter em mente:

Alterar valores especificos dentro de arquivos de texto já existente
nao é uma pratica comum,
e é algo trabalhoso - o mais comum é criar um novo arquivo, com os
dados desejados alterados -
e ai renomear ou apagar o arquivo antigo.


Entao a lógica fica:

com os arquivos de entrada e saida abertos:
ler uma linha do arquivo de entrada
se a linha contem a sequencia que requer alteracao:
criar um novo valor pra linha, com a alteracao
no arquivo de saida, escrever a linha
renomear o arquivo original
renomear o novo arquivo para o nome original

(pronto, dai é só traduzir pra Python) .

A parte de "criar uma nova linha com a alteração" tambem requer uma explicação:
em Python, ao contrário de C, as string são valores imutáveis.
QUnado voce le uma linha do arquivo, voce tem uma string - entao ao
criar uma nova linha
o usual é copiar as partes que você quer deixar as mesmas, e colocar o
valor que voce
quer modificar.

Como o separador de campos no seu arquivo é "|" um jeito pratico de
fazer isso é
usar os métodos "split" e "join" das strings: dividir (split) a
string por campos onde existem "|",
re-escrever o campo desejado, e juntar de novo com "|" para uma nova string.

Entao, essa sequencia poderia ser:

if "C100" in linha:
tmp = linha.split("|")
tmp[4] = nova_letra
linha = "|".join(tmp)
--
Nao vou por o rpograma prontinho, por que nao é a pratica na lista --
mas aproveite para ver o comando "with" para usar arquivos a partir
do Python -


js
-><-

2013/2/18 Halyson Sampaio <halyson...@gmail.com>:

Halyson Sampaio

unread,
Feb 18, 2013, 12:34:47 PM2/18/13
to python...@googlegroups.com
Valeu Bruno e João, era exatamente isso que eu precisava, meu código ficou assim.

arq = open( 'C:/texto.txt', 'r')
novo = open( 'C:/novo.txt', 'r+')

linhas = sum(1 for line in arq)
arq.seek(0)
nval='X'

for i in range(linhas):
    linha=arq.readline()
    if 'C100' in linha :
        tmp=linha.split('|')
        tmp[4]=nval
        linha='|'.join(tmp)
        novo.write(linha+"\n")
    else:
        novo.write(linha)
Reply all
Reply to author
Forward
0 new messages