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

becosta83

HELP - Ficheiros de texto

14 mensagens neste tópico

Olá a todos,

sei que isto não é nehum "Diz que nós fazemos por ti", mas tenho um mini trabalho em mãos para entregar a um professor e gostava que apenas me dessem umas pequenas luzes, ou seja me indicassem como fazer a parte de pesquisar os ficheiros no disco e de como ler a data dos ficheiros.

O exercicio é:

# Quantos ficheiros de texto (ficheiros com a extensão .txt) que

# possuam mais do que 10 linhas de texto se encontram na drive C: do

# computador (podem estar na raiz ou num subdirectório) e cuja data de

# modificação é mais antiga do que a data de modificação do ficheiro

# fornecido como argumento na linha de comando?

#

# NOTA: sugere-se a utilização dos seguintes módulos: sys, os, os.path

Obrigado, eternamente grato,

Dani Costa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vais precisar do os.walk(), de fazer open(ficheiro, 'r').readlines(), usar o len() e o sys.argv, pelo menos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ola novamente. o meu problema é não perceber muito pouco de qualquer tipo de programação  :-[  tenho isto resolvido.. Será que tou a ir por um caminho promissor?

import os
import os.path
pasta = raw_input("pasta = ?")
listaNomes = os. listdir(pasta)
print listaNomes
n=len(listaNomes)
d=0
for K in listaNomes:
    print K
    if os.path.isdir (pasta + "C:" + K) == True:
        d = d+1
        print "dir"
    print n-d

import os
import sys
import time
lista=[]
lista=sys.argv
time=time.time()
antigo=""
k=0

while k<len(lista):
    z=0
    if os.path.isfile(lista[k]):
        mod=os.path.getmtime(lista[k])
        if mod<time:
            time=mod
            antigo=lista[k]
    if os.path.isdir(lista[k]):
        Pasta=lista[k]
        lista2=os.listdir(Pasta)
        print lista2
        while z<len(lista2):
            if os.path.isfile(Pasta+"/"+lista2[z]):
                mod=os.path.getmtime(Pasta+"/"+lista2[z])
                if mod<time:
                    time=mod
                    antigo=Pasta+"/"+lista2[z]
            z=z+1
    k=k+1
print "O ficheiro mais antigo e': %s" %(antigo)

este codigo foi um colega que mo indicou...

Obrigado.

Dani Costa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual o algoritmo para ver se um ficheiro tem 10 linhas?

Obrigado,

Dani Costa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual o algoritmo para ver se um ficheiro tem 10 linhas?

Obrigado,

Dani Costa

len(open(ficheiro, 'r').readlines())

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
if len(open(ficheiro, 'r').readlines()) >= 10:
    print "O ficheiro tem pelo menos 10 linhas."

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto esta desmazelado mas como não quero que facas copy/paste, quero te apenas a ajudar a perceber a lógica, deixo-te um pedaço de código que procura todos os ficheiros txt e selecciona os que tem 10 ou mais linhas....


import os, glob

global txtfiles, txtfinal
txtfiles=[]
txtfinal=[]

def listfiles(arg, dirname, names):
    global txtfiles

    for name in names:
        afile=os.path.join(dirname, name)
        if os.path.isdir(afile):
            if glob.glob(afile+'\\*.txt'):
                for txts in glob.glob(afile+'\\*.txt'):
                    txtfiles.append(txts)          

dire=raw_input("Directoria ?") 
os.path.walk(dire, listfiles, None)

def contalinhas():
    global txtfiles
    global txtfinal

    for files in txtfiles:
        if len(file(files,'r').readlines())>=10:
            txtfinal.append(files)
            
        
contalinhas()
print "O numero de ficheiros txt encontrado e "+`len(txtfiles)`+"\n"
print "O numero de ficheiros txt com mais de 10 linhas e "+`len(txtfinal)`+"\n"


raw_input('Prima Qualquer tecla para sair')

+

Tem ai alguns "truques" que precisas de compreender para poderes modificar o código mas isso agora deixo contigo :P qualquer duvida que não consigas resolver por ti pergunta :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tinha que vir eu com as minhas dúvidas de caloirinha...  :-[:P

Para que serve o os.walk()

e que tipo de grupo é o glob?

Agradecida. Beijinhos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell.

Parece-me ser uma espécie de regex para nomes de ficheiros.

http://docs.python.org/lib/module-glob.html

Quanto ao os.walk():

walk() generates the file names in a directory tree, by walking the tree either top down or bottom up. For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

É um método usado para percorreres uma determinada pasta/caminho. Vai-te dando o nome das pastas, da raiz das pastas e dos ficheiros das pastas, permitindo-te construir o caminho completo para a pasta num instante :D

http://docs.python.org/lib/os-file-dir.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O os.walk() "recolhe" todos os ficheiros/directorios/sub-directorios dentro do directorio que tu indicares:

>>> import os
>>> a = os.walk(r"c:\python25")
>>> for b in a:
...     b
...     
('c:\\python25', ['DLLs', 'include', 'Lib', 'libs', 'Scripts', 'tcl', 'Tools'], ['LICENSE.txt', 'mod_python-wininst.log', 'msvcr71.dll', 'NEWS.txt', 'psyco-wininst.log', 'python.exe', 'python.exe.manifest', 'pythonw.exe', 'pythonw.exe.manifest', 'README.txt', 'Removemod_python.exe', 'Removepsyco.exe', 'unicows.dll', 'w9xpopen.exe'])
('c:\\python25\\DLLs', [], ['bz2.pyd', 'py.ico', 'pyc.ico', 'pyexpat.pyd', 'select.pyd', 'sqlite3.dll', 'tcl84.dll', 'tclpip84.dll', 'tix84.dll', 'tk84.dll', 'unicodedata.pyd', 'winsound.pyd', '_bsddb.pyd', '_ctypes.pyd', '_ctypes_test.pyd', '_elementtree.pyd', '_hashlib.pyd', '_msi.pyd', '_socket.pyd', '_sqlite3.pyd', '_ssl.pyd', '_testcapi.pyd', '_tkinter.pyd'])
etc......

cada linha é organizada da seguinte forma:

(directorio, [subdirectorio 1, subdirectorio 2, etc...], [ficheiro 1, ficheiro 2, etc...])

enquanto que o os.getcwd() dá-te a directoria de trabalho.

>>> os.getcwd()
'c:\\'

que pode ser mudada com o os.chdir()

>>> os.chdir(r"c:\python25")
>>> os.getcwd()
'c:\\python25'

.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então a diferença é que o os.walk() nos dá o "path" todo e o os.getcwd() só nos dá o directório... Obrigado! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao! os.walk é muito util porque te lista(da-te uma lista) todos os ficheiros, directorios e subdirectirios e ficheiros dentro dos subdirectorios dentro do path que lhe deste enquanto o os.getcwd() apenas te diz o directorio onde estas...

Capisce :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era mais ou menos o que eu queria dizer... Até porque o computador não é bruxo e não sabe qual é o ficheiro que queres se não o indicares logo ia-te dar todas as possibilidades que tinhas. :)

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