-
Total de itens
463 -
Registro em
-
Última visita
Tudo que Kakao postou
-
Não são dois milhões de acessos ao arquivo. São tantos quantos o tamanho do buffer de leitura determinar. Aliás o tamanho do buffer é o terceiro parâmetro que pode ser passado para a função open(). Se omitido, o tamanho é o default do sistema. Se você passar um tamanho razoável, digamos 10 ou 100 mil bytes, o desempenho será muito bom. Não faça isso com um arquivo grande. Se o arquivo tiver um tamanho parecido ou maior que a memória disponível o sistema vai usar memória virtual e o desempenho vai despencar. A otimização prematura é a raiz de muitos problemas em programação. Não otimize a não ser que você consiga provar com testes que a otimização vai ser importante. A otimização torna o seu código quebradiço e obscuro e geralmente não vale a pena. Este é um dos mandamentos da boa prática de programação e quem já passou sufocos aprendeu a respeitar. O erro de algoritmo do seu código, difícil de achar, foi exatamente por quebrar esta regra. Isto com um programa de poucas linhas. Imagine quando voce estiver envolvido com um sistema de milhares ou dezenas de milhares de linhas. Escreva códigos simples e claros. Deixe a esperteza para as horas certas.
-
Não. O problema de saltar linha era causado por um erro no algoritmo. Compare o seu programa com o programa que eu coloquei e veja a diferença (eu citei as linhas diferentes). Não. Ler caracter por caracter é a pior solução. A melhor solução é ler linha a linha com f.readline(). E fica melhor ainda se os campos do arquivo estiverem separados por tab porque aí basta fazer linha.split('\t') para ter uma lista com todos os campos daquela linha.
-
Eu ajeitei o programa. Veja linhas 1, 27 e 53. Parece que você está lendo o arquivo byte a byte por uma exigência de algum curso, o que é normal para exercitar algoritmos. Mas se não for isso ler um arquivo texto linha a linha é muito mais simples e evita as muitas armadilhas do byte a byte. Qual a vantagem neste caso de se usar __getitem__()? Eu troquei pela indexação simples []. import sys def converteMega(byte): return float(byte)/pow(1024,2) def percentualUso(valor_parcial, total): return float(valor_parcial)*100/float(total) f = open('usuarios.txt','r') bloco = f.read() i = 0 soma = 0 quantidade = 0 media = 0 lista = [] x = 0 nomes = [] espacos = [] string = '' while True: snumero = '' snome = '' if (i) == len(bloco): media = soma/quantidade while x < len(espacos): perc = '%10.2f' % percentualUso( converteMega(espacos[x]), soma ) + ' %' no = nomes[x] esp = '%10.2f MB' % converteMega( espacos[x] ) string = str(x+1) + '\t' + no + '\t' + str(esp) + '\t' + str(perc) print string x += 1 so = 'Espaco total ocupado: %.2f MB' % soma me = 'Espaco medio ocupado: %.2f MB' % media sys.exit(0) while bloco[i] != ' ': snome = snome + bloco[i] i += 1 while bloco[i] == ' ': i += 1 while bloco[i] != '\n': snumero = snumero + bloco[i] i += 1 if bloco[i] == '\n': i += 1 nomes.append(snome) espacos.append(snumero) soma += converteMega(snumero) quantidade += 1 f.close()
-
Pelo código não dá para enternder o que você pretende. Mas vejo dois problemas: O primeiro é que f.read() lê o arquivo inteiro então bloco vai ser sempre verdadeiro e a sua condição de fim nunca será alcançada. A condição neste caso pode ser if i == len(bloco): exit(0) O código 1 em um exit significa uma condição de erro o que não é o caso no seu programa. O segundo é que i vai ser sempre igual a c então não sei para que você está testando i == c.
-
Você está esquecendo de quebrar o loop no fim do arquivo. Coloquei uma condição de fim. Tem linha vazia no arquivo? O seu código vai falhar se houver. Coloquei uns prints para ajudar a achar os erros. f = open('usuarios.txt','r') linha = 0 while True: i = 0 snumero = '' snome = '' bloco = f.readline() if not bloco: break linha += 1 print 'linha: ', linha, while bloco[i] != ' ': print i, bloco[i], snome = snome + bloco[i] #esta acontecendo index out of range aqui . i += 1 print while bloco[i] == ' ': i += 1 f.close()
-
O mais fácil é ler com um for. Dois exemplos com while: f = open('arquivo.txt', 'r') linha = f.readline() while linha: print linha, linha = f.readline() f.close() Ou: f = open('arquivo.txt', 'r') while True: linha = f.readline() if linha == '': break print linha, f.close()
-
Pra mim só faltou definir snome: f = open('usuarios.txt','r') for linha in f: i = 0 snumero = '' snome = '' while linha[i] != ' ': snome = snome + linha[i] i += 1 while linha[i] == ' ': i += 1 while linha[i] != '\n': snumero = snumero + linha[i] i += 1 print snome, snumero Se o separador de nome e número for um tab ao invés de espaços fica mais fácil: f = open('usuarios_tab.txt','r') for linha in f: i = 0 snumero = '' snome = '' while linha[i] != '\t': snome = snome + linha[i] i += 1 i += 1 while linha[i] != '\n': snumero = snumero + linha[i] i += 1 print snome, snumero E mais fácil ainda: f = open('usuarios_tab.txt','r') for linha in f: l = linha.rstrip().split('\t') print l[0], l[1]
-
Eu acho que você vai ter mais sucesso com este problema na lista do python: http://br.groups.yahoo.com/group/python-brasil/
-
E assim: import subprocess subprocess.call(['ls', '-l'])
-
Tente: import subprocess subprocess.call('ls -l')
-
Use o módulo subprocess: http://docs.python.org/lib/module-subprocess.html Tente usar, se não conseguir poste o que você tentou.
-
>>> s = 'abc' >>> for c in s: ... print c, ... a b c
-
Para inteiros entre 1 e 100: >>> random.randint(1,100) 55
-
Só para ter certeza: É Linux, não é? Eu não consigo fazer isso. O que não abre? Tem alguma mensagem de erro?
-
O módulo standard para GUI é o Tkinter. http://pt.wikipedia.org/wiki/Tkinter Tutorial em português se você ainda não conhece: http://www.pythonbrasil.com.br/moin.cgi/Do...et=python24.pdf Página com links para documentação: http://www.pythonbrasil.com.br/moin.cgi/DocumentacaoPython
-
Se for linux você deixa o programa rodando em background: $ ./meu_programa.py &
-
Esta linha indica que você tentou executar hora.py na raiz do site. Você deve executá-lo no diretório cgi-bin, onde devem ser salvos os programas cgi, a não ser que o Apache esteja configurado de outra forma. http://localhost/cgi-bin/hora.py
-
Neste caso verifique se o Apache está rodando. Poste o error.log como eu sugeri no post anterior. Você está deixando um espaço entre "!" e "c". Não sei se faz diferença, mas na hora do sufoco é melhor não dar chance para o azar. Se você abrir uma janela com o DOS e digitar python o que acontece? Para abrir uma janela DOS configurada para o Python: Iniciar -> Programas -> Python -> Python (command lIne)
-
Veja as mensagens que estão no arquivo error.log e poste aqui. No Windows a primeira linha do programa deve ser: #!c:/Python25/python.exe Com qual endereço você está tentando executar o programa no navegador? Este é o único programa que não funciona? No Windows as vezes o Apache escuta na porta 8080, neste caso tente: http://localhost:8080/cgi-bin/meu_programa.py Em qual diretório está o programa? cgi-bin?
-
Python é cada dia mais usada. Visite o site brasileiro: http://pythonbrasil.com.br/moin.cgi/ A lista nacional: http://www.nabble.com/Python---Brasil-f13844.html Não sei o que você quer dizer com abrangência, mas Python é uma linguagem de utilização genérica. Tem apliação comercial, web, científica, em servidores, etc.
-
Onde tem '/' substitua por r'C:\cards'
-
A forma mais didática: >>> import os >>> os.listdir('/') ['opt', 'net', 'media', 'lost+found', 'lib', 'srv', 'tmp', 'misc', 'proc', 'selinux', '.autorelabel', '.autofsck', 'sbin', 'dev', 'sys', 'var', 'root', 'mnt', 'boot', 'etc', 'home', 'bin', 'usr'] >>> l = os.listdir('/') >>> for arquivo in sorted(l): ... if 'm' in arquivo: ... print arquivo ... home media misc mnt tmp Ou uma list comprehension: >>> [arquivo for arquivo in sorted(os.listdir('/')) if 'm' in arquivo] ['home', 'media', 'misc', 'mnt', 'tmp']
-
Além das opções já citadas pelo Graymalkin vou dar dois exemplos. O primeiro usando CGI: #!/usr/bin/env python print "Content-Type: text/html" print print """\ <html> <body> Alô Mundo! </body> </html> """ Salve este programa como alo.py no diretório do seu servidor que estiver configurado para executar CGI. No Fedora é o /var/www/cgi-bin. Não se esqueça de torná-lo executável (chmod +x). Depois chame a página assim http://meuservidor.tld/cgi-bin/alo.py. O segundo exemplo usando o Publisher Handler do mod_python: def index(req): s = """\ <html> <body> Alô Mundo! </body> </html> """ return s Para usar o Publisher Handler configure o Apache com estas diretivas, além de instalar o mod_python: AddHandler mod_python .py PythonHandler mod_python.publisher PythonDebug On Chame a página assim: http://meuservidor.tld/alo.py Tutorial em inglês (exemplos em Python): http://webpython.codepoint.net
-
Mas pelo fórum ou pelo email não dá para mandar uma capa bonita e decorada para aumentar a nota. Você não prefere Sedex? :rolleyes:
-
Experimente setar o character set. Testado no mysql 5.0: mysql> set names utf8; Query OK, 0 rows affected (0.00 sec) mysql> select 'Câmera' = 'camera'; +----------------------+ | 'Câmera' = 'camera' | +----------------------+ | 1 | +----------------------+ 1 row in set (0.00 sec) O meu sistema é utf-8 (Fedora 5). Se não funcionar no Windows você pode tentar latin1 ou ainda em vez de "set names" usar "set character set" que usa a collation da base.