• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

vaurdan

Duvida com ficheiros de texto.

36 mensagens neste tópico

Boas,

Ando aqui ás voltas... Imaginem que eu tenho um ficheiro de texto com o seguinte formato:

###Comments here blablabla
###Again....
teste:lool
hehe:miau
exemplo:esclarecedor

E queria que o phyton lesse o ficheiro, ignorasse os comentários, e printasse aquilo desta forma (exemplo)

Tablela 1 | Tabela 2
Teste | Lool
hehe | miau
exemplo | esclaracedor

Alguem tem sugestões de como se faz isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fácil.

Para o conteúdo do ficheiro

>>> ficheiro = file("OMGWTFBBQ.txt", "r")
>>> conteudo = []
>>> for linha in ficheiro.readlines():
if linha.startswith("#"):	# Encontramos um comentário, ignorar
	pass
else:
	conteudo.append(linha)

>>> print conteudo
['teste:lool\n', 'hehe:miau\n', 'exemplo:esclarecedor\n']

Hum... Agora para fazer o print da tabela...

>>> def print_tabela(tabela):
print "Tabela 1 | Tabela 2"
for linha in tabela:
	tmp = linha.split(":") # linha é uma string, vamos dividi-la.
	print tmp[0] + " | " + tmp[1], # A vírgula serve para o print não 
                                                                    # inserir um newline, que já está na string.

>>> print_tabela(conteudo)
Tabela 1 | Tabela 2
teste | lool
hehe | miau
exemplo | esclarecedor

Se quiseres, podes substituir a linha 'print tmp[0] + " | " + tmp[1]' por 'print "%s | %s", % (tmp[0], tmp[1])', se achares que se lê melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

muito obrigado!!! Outra coisa... Eu quero fazer um ficheiro de configuração.. e quero que certas variaveis estejam num ficheiro. Como fasso?

E esse codigo está-me a dar um erro...

Traceback (most recent call last):

  File "./teste.py", line 27, in <module>

    for linha in ficheiro.readlines():

IOError: [Errno 9] Bad file descriptor

else:
print "Filetypes file found! Proceeding"
ficheiro = file('filetypes','wt') #cria o ficheiro
conteudo = []
text_file = open("filetypes", "wt") #Abre o ficheiro
for linha in ficheiro.readlines():
	if linha.startswith("#"):	# Encontramos um comentário, ignorar
		pass
	else:
		conteudo.append(linha)
print conteudo

EDIT: Problema do Erro resolvido :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok... Agora tenho outro erro:

>>> print_tabela(conteudo)

Tabela 1 | Tabela 2

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "<stdin>", line 5, in print_tabela

IndexError: list index out of range

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja resolvi :D Pelos vistos não posso ser eu a criar o ficheiro manualmente mas sim o programa a cria-lo :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra coisa. tenho esta linha:

os.system("mkdir " + tmp[0])

O programa após executar esta linha termina... Como mando o programa continuar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha dedução: o programa termina porque essa é a última linha de código e queres que ele volte ao início.

Se for esta metes todo o código dentro de 1 loop

while True: (código)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não.. Simplesmente para.. Como se o programa não tivesse mais linhas...

Tenho isto:

os.system("cd /home/" + username + "/" + Desktop)
for linha in tabela:
		tmp = linha.split(":") # linha é uma string, vamos dividi-la.
		os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])
		os.system("mv " + tmp[1] + " " + tmp[0])

ele para no os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])

Como se tivesse acabado o programa ali...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete aqui o código todo sff (não tenho paciência pa tar a juntar o codigo de cada post).

Mas isso deve haver algum bug da nossa parte (humana).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Neste caso o bug não tem haver com o que programei, mas com com a função os.system. Eu executo o comando mkdir /home/username/Desktop/NomeDaPasta/ aquilo cria as pastas mas depois não executa o outro comando (mv (Move em linux))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não.. Simplesmente para.. Como se o programa não tivesse mais linhas...

Tenho isto:

os.system("cd /home/" + username + "/" + Desktop)
for linha in tabela:
		tmp = linha.split(":") # linha é uma string, vamos dividi-la.
		os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])
		os.system("mv " + tmp[1] + " " + tmp[0])

ele para no os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])

Como se tivesse acabado o programa ali...

Uma coisa que não compreendi é isto:

Primeiro tu tens isto "os.system("cd /home/" + username + "/" + Desktop)"

Depois tens "os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])".

Porque é que usas uma absolute path no segundo?

E outra coisa, para fazer o Python mudar de pastas, o comando que procuras é o "os.chdir(caminho_para_a_pasta)"

EDIT: Outra coisa, porque é que estás a recriar a pasta dentro do ciclo? Assim ele vai tentar recriar a pasta por cada linha de texto que o ficheiro tiver.

Mas se for isso que queres, então tenta este comando "os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0]" && mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas se eu usar o os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0]" && mkdir /home/" + username + "/" + Desktop + "/" + tmp[0]) o programa após executar isso termina... E eu não queria que terminasse.

Outra coisa, como posso impedir a pasta de ser recriada?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas se eu usar o os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0]" && mkdir /home/" + username + "/" + Desktop + "/" + tmp[0]) o programa após executar isso termina... E eu não queria que terminasse.

Outra coisa, como posso impedir a pasta de ser recriada?

Eu preciso do código todo pa perceber o que pretendes com ele. Porque até te podia responder, mas não sei o objectivo.

(Já te adicionei no msn, mas n me apareces on. Adiciona o meu: tharis20@hotmail.com)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra coisa, como posso impedir a pasta de ser recriada?

Coloca o "os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])" fora do ciclo.

Assim só é criada uma vez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não faz sentido :/ Porque é no ciclo que a variavel é defenida por isso nao posso por antes...

E não posso por depois porque tenho de criar primeiro as pastas e só depois mover...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já tenho aqui cenas a apontar:

1. - As extensões de tmp[1] estão com um '\n' no final;

2. - Em:

os.system("mv " + tmp[1] + " " + tmp[0])

, tu tás a fazer isto "mv .rpm\n Packages", ou seja, nem indicas o nome do ficheiro a mover e a extensão tem 1 parágrafo no final.

Em relação a:

Outra coisa, como posso impedir a pasta de ser recriada?

Coloca o "os.system("mkdir /home/" + username + "/" + Desktop + "/" + tmp[0])" fora do ciclo.

Assim só é criada uma vez.

Podes fazer um 'try: criar pasta except: pass' porque ele depois da pasta tar criada retorna 1 porra a dizer que já tá e n pode voltar a criar e então, se fizeres o pass ele n retorna isso e tá done!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse codigo continua a não mover os ficheiros...

Ele acaba o programa após criar as pastas como se não houvesse mais codigo.... Até já adicionei um print "Teste" logo a seguir e tambem não dá :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse codigo continua a não mover os ficheiros...

Ele acaba o programa após criar as pastas como se não houvesse mais codigo.... Até já adicionei um print "Teste" logo a seguir e tambem não dá :D

Eu sei que ele não move. Se fores a ver, a linha para mover está comentada. Eu fiz isso pq:

-> Estava a dar erro, porque tu em vez de tares a fazer "mv ficheiro.extensão pastadedestino" tás a fazer "mv extensão\n pastadedestino"

-> E este erro tava a impedir a criação das sub-pastas.

Para mover os ficheiros, crias 1 lista com todos os files do Desktop, vês a sua extensão e organizas de acordo com o que queres.

Eu até te fazia o código, mas estaría-te a tirar o prazer. :thumbsup:

Vai à shell do python e faz:

[s]import os[/s]
[s]os.listdir("/home/tharis/Desktop/")[/s]

E a partir daí faz o código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se eu fizesse manualmente fazia:

mv *.ext /home/vaurdan/Desktop/Pasta/SubPasta

E fazia um loop para todos os que estão na lista... Estou proximo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já te fiz toda a papinha. (em anexo)

Agora é só meteres as mariquices que queiras.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora