Hugu Posted May 22, 2008 at 02:30 AM Report Share #186626 Posted May 22, 2008 at 02:30 AM Tenho esta script e o que faz é adicionar, neste caso, links sucessivamente num ficheiro externo *.txt a = str(raw_input('Insira o link : ')) f = open('c:\..\links.txt','a+') f.write('\n') f.write(a) f.close() A script cria o ficheiro pela primeira vez e depois vai adicionando os links sucessivamente, na linha seguinte..do género: www.link1.pt www.link2.pt ... Mas eu queria que os links sejam postos da seguinte maneira: ... www.link3.pt www.link2.pt www.link1.pt ou seja, o mais recente no inicio.. Como posso faze-lo? Vê textos sobre slicing. Vais precisar de saber usar listas. Se não encontrares/perceberes, diz que eu dou-te um exemplo 😛 Também me lembrei por meio de listas e no inicio fazia uma lista com os links ja existentes e depois re-escrevia com a ordem desejada...mas como faço uma lista que varia de dimensão sempre que adiciono novo link? Link to comment Share on other sites More sharing options...
djthyrax Posted May 22, 2008 at 08:26 AM Report Share #186638 Posted May 22, 2008 at 08:26 AM lista = [] lista.append(link1) lista.append(link2) Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Tharis Posted May 22, 2008 at 12:14 PM Report Share #186665 Posted May 22, 2008 at 12:14 PM lista = [] lista.append(link1) lista.append(link2) Exactamente, só que isto vai ficar com a lista: x=[link1,link2,...] que está ordenada do último para o mais recente. Podias corrê-la de trás para a frente, mas podes usar o método insert para inserir na posição que queres o recebido. lista=[] f = open('c:\..\links.txt','a+') while True: a=raw_input("Insira o link: ") # Aqui nao precisas do método str() que usas, porque o raw_input recebe uma string lista.insert(0,a) # O método insert, recebe como primeiro argumento a posição onde queres inserir e o segundo, o que queres inserir for i in lista: f.write(i+'\n') f.close() Link to comment Share on other sites More sharing options...
JoaoRodrigues Posted May 22, 2008 at 01:45 PM Report Share #186687 Posted May 22, 2008 at 01:45 PM Ou então, usando splicing, como disse o tirácio no outro post, podes fazer a lista "normalmente", com o append, e no fim, invertê-la: lista = [] lista.append(link1) lista.append(link2) lista = lista[::-1] Para sabers mais sobre slicing, tens um bom tutorial aqui no fórum, que agora também está na wiki 😛 http://wiki.portugal-a-programar.pt/dev_geral:python:slicing Link to comment Share on other sites More sharing options...
Tharis Posted May 22, 2008 at 02:10 PM Report Share #186700 Posted May 22, 2008 at 02:10 PM Ou então, usando splicing, como disse o tirácio no outro post, podes fazer a lista "normalmente", com o append, e no fim, invertê-la: lista = [] lista.append(link1) lista.append(link2) lista = lista[::-1] Para sabers mais sobre slicing, tens um bom tutorial aqui no fórum, que agora também está na wiki 😛 http://wiki.portugal-a-programar.pt/dev_geral:python:slicing Epá, agr é que vi que ele fala em slicing... Não tinha visto... :\ Sorry... Link to comment Share on other sites More sharing options...
Hugu Posted May 23, 2008 at 03:33 AM Author Report Share #186856 Posted May 23, 2008 at 03:33 AM humm..acho que não perceberam o meu problema 🙂 Eu não quero fazer uma script que me inverta a posição dos links dum ficheiro ja criado e mesmo que fosse era castigo ter de voltar a meter os links todos um a um, tirácio 😛 ...mas ja me deram umas ideias! 😉 Mas era assim, a minha script adiciona links desta maneira: www.link1.pt www.link2.pt ... e eu queria que ela adicionasse não a seguir ao último link, mas no inicio. Só que não vou andar adicionar links todos seguidos, p.exe.: é tipo como se fosse os bookmarks (os favoritos), estou na net e dou com um link que tenho interesse em guardar. Eu então corro a script e adiciono o link num *.txt , ele adiciona, grava e fecha o file, até uma proxima vez. Quando quero meter outro link, então volto a executar a script.. e isto ocorre com o tempo que estou a navegar.. A minha ideia era, ja que só consigo adicionar no fim, eu antes de adicionar, fazia um readlines() e metia todos os links, separadamente, numa lista, listaA (neste momento é como se ficasse com um ficheiro em branco), depois inseria o novo link numa outra lista e dizia para este tomar a posiçao listaB[0] e metia a listaA apartir da posição[1] da listaB, ou seja a listaB teria uma dimesão n+1 em relação à listaA. Depois era so fazer f.write de cada parte da listaB no ficheiro. E isto fazia-o acontecer sempre que adicionasse novo link. Vou tentar, se tiver dificuldades ou empancar em alguma parte, volto! 😁 Obrigado mais uma vez 😛 p.s.:um dúvida, quando faço duplo click num ficheiro *.py (quando executo uma script no windows) ele abre-me o python.exe command line, como eu mudo para que me abra o python IDLE por defeito? Link to comment Share on other sites More sharing options...
Tharis Posted May 23, 2008 at 08:24 AM Report Share #186860 Posted May 23, 2008 at 08:24 AM Vai dar ao mesmo... Não precisas de duas listas... f=open("links.txt",'r') lista=f.readlines() lista.insert(0,raw_input("Link: ")+'\n') f=open("links.txt",'w') for i in lista: f.write(i) f.close() Link to comment Share on other sites More sharing options...
JoaoRodrigues Posted May 23, 2008 at 03:52 PM Report Share #186927 Posted May 23, 2008 at 03:52 PM Tharis, tens que fechar o ficheiro antes de abrires para escreveres acho eu. Quanto ao que estás a dizer, é como um append mas no início do ficheiro não é? A maneira que encontro é também a do Tharis. Pelo menos é a mais simples 🙂 Já agora, é UM script 👍 Link to comment Share on other sites More sharing options...
djthyrax Posted May 23, 2008 at 06:33 PM Report Share #186954 Posted May 23, 2008 at 06:33 PM Tu queres acrescentar links no início do ficheiro, certo? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
JoaoRodrigues Posted May 23, 2008 at 10:47 PM Report Share #187007 Posted May 23, 2008 at 10:47 PM Sim, quer um append mas em vez de ser no fim do ficheiro, no início. Link to comment Share on other sites More sharing options...
Tharis Posted May 23, 2008 at 11:03 PM Report Share #187012 Posted May 23, 2008 at 11:03 PM Tharis, tens que fechar o ficheiro antes de abrires para escreveres acho eu. Já agora, é UM script 😛 Não, não tenho... É recomendado, mas eu não sigo recomendações... 🙂 Pensava que já tinha dito que script era masculino... Afinal não... 👍 Link to comment Share on other sites More sharing options...
djthyrax Posted May 24, 2008 at 10:03 AM Report Share #187078 Posted May 24, 2008 at 10:03 AM Então tens de ler o ficheiro todo para a memória, escrever o novo link e depois o que estava lá primeiro, porque não podes "empurrar" isso assim à bruta para a frente. Ou seja: files = open('ficheiro', 'r').readlines()[::-1] files.append(link) open('ficheiro', 'w').write('\n'.join(files[::-1])) Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
fnds Posted May 25, 2008 at 05:46 PM Report Share #187405 Posted May 25, 2008 at 05:46 PM Se o ficheiro for grande em vez de colocares tudo na memória podes criar um ficheiro temporário. import os, distutils.file_util #importa os modulos src_file = 'links.txt' tmp_file = src_file+'.tmp' linha = 'http://www.portugal-a-programar.org/\n' buf_size = 8192 #quantidade de dados a ser lidos em cada loop distutils.file_util.copy_file(src_file, tmp_file)#copia o ficheiro src_file para tmp_file, também altera os nomes src = open(src_file, 'wb')#abre o ficheiro, apagando o seu conteudo src.write(linha)#escreve o novo link tmp = open(tmp_file, 'rb')#abre o ficheiro temporario criado while 1: data = tmp.read(buf_size)#le um bloca de dados if not data:#se nao houver dados: tmp.close()#fecha o ficheiro temporario os.remove(tmp_file)#apaga-o break#sai do loop src.write(data)#escreve os dados do ficheiro temporario para o ficheiro original Link to comment Share on other sites More sharing options...
djthyrax Posted May 25, 2008 at 06:27 PM Report Share #187423 Posted May 25, 2008 at 06:27 PM Falta-te aí o import ao distutils. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Hugu Posted May 26, 2008 at 12:36 AM Author Report Share #187490 Posted May 26, 2008 at 12:36 AM Acabei por desisitir da minha ideia de usar duas listas e peguei no script do Tharis.. ..alterei no 1º openfile a tag "r" para "a+" porque no instante inicial, como não tenho ficheiro criado, o programa dá erro.. e acrescentei um print para me informar os links existentes.. 😄 Assim: f = open('c:\...\links.txt','a+') lista=f.readlines() print len(lista),' links!' lista.insert(0,raw_input('Insira o Link:')+'\n') f=open("c:\...\links.txt",'w') for i in lista: f.write(i) f.close() Mas obrigado a todo o pessoal! 😄 Estão a ser uma grande ajuda! n por me ajudarem a fazer o script, porque é apenas uma brincadeira didáctica, mas assim na minha aprendizagem!.. Ah! Mas isto não vai parar por aqui, o programa vai evoluir! 😁 Estou agora a pensar acrescentar "comentários" aos links e organizá-los por categorias!..por isso espero continuar com a vossa ajuda! Mas vou tentar eu primeiro... 😄 até breve.. 😛 Link to comment Share on other sites More sharing options...
fnds Posted May 26, 2008 at 12:48 PM Report Share #187550 Posted May 26, 2008 at 12:48 PM Falta-te aí o import ao distutils. E ao os, corrigido 😉 Link to comment Share on other sites More sharing options...
Hugu Posted May 27, 2008 at 02:32 AM Author Report Share #187776 Posted May 27, 2008 at 02:32 AM fnds: interessante!..assim pode-se evitar a perda dos dados do ficheiro por overflow ..mas o que se entende por ficheiro grande? qual o tamanho da memória que o python usa? ? fnds, posso pedir um favor? Dá para fazer uns comentários no script, como fez o Tharis em #2, para saber o que é o quê e o que faz cada linha de código? 😉 Obrigado! Link to comment Share on other sites More sharing options...
newbeen Posted May 27, 2008 at 02:43 AM Report Share #187777 Posted May 27, 2008 at 02:43 AM O python usa a memoria que tu lhe disseres para usar caso nao lhe des um montante ele vai tentar carregar todo o ficheiro na memoria tens aqui um exemplo Obter o md5 de um ficheiro.... def GetMd5(file): fh = open(file,"rb") #abre o ficheiro em modo de leitura binario digest = md5.new() while 1: buf = fh.read(5120) #quantidade de memoria que vai ser utilizada de cada vez, depois de lido o bloco carrega um novo e descarta o anterior if buf == "": #quando todos os blocos forem lidos break digest.update(buf) fh.close() final_md5=digest.hexdigest() print final_md5 Porque dar este exemplo??? Simples tenta obter o md5 de um ISO de um DVD sem a variavel buf(quantidade de memoria a usar) o computador vai ficar extremamente lento(ou encravar) :S mas se deres a quantidade de memoria a usar alem de ser muito mais rápido porque não precisas de esperar 4gb serem lidos nao encravas o pc!!! RHCE - 120-062-534 Link to comment Share on other sites More sharing options...
fnds Posted May 27, 2008 at 10:57 AM Report Share #187811 Posted May 27, 2008 at 10:57 AM fnds: interessante!..assim pode-se evitar a perda dos dados do ficheiro por overflow ..mas o que se entende por ficheiro grande? qual o tamanho da memória que o python usa? ? A tamanho do ficheiro que abrires. fnds, posso pedir um favor? Dá para fazer uns comentários no script, como fez o Tharis em #2, para saber o que é o quê e o que faz cada linha de código? 🙂 Feito 😉 Link to comment Share on other sites More sharing options...
Hugu Posted June 2, 2008 at 04:14 PM Author Report Share #189149 Posted June 2, 2008 at 04:14 PM Obrigado pessoal por colocarem mini-comentários ao longo dos scripts que sugerem! 😛 Ajuda mto e facilita imenso o processo de aprendizagem e compreensão da semântica á volta desta linguagem de programação! E qto ao meu script, ficou um bocado parado.. o tempo n dá para tudo e o dia só tem 24h 😁 mas não deixei de ir magicando na minha cabeça ideias a implementar! 😛 Vou retomar e em breve vou dando noticias e ou, mais provável, pedir vossa ajuda de novo! 😄 😛 Mais uma vez obrigado a todos! Abr p.s.: ah e parabéns atrasados a todos vós que fizeram e fazem desta comunidade um excelente grupo! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now