python et les fichiers

Lecture d’un fichier

with open('test.txt') as f:
    for l in f.readlines():
        print(l)

Recherche et sauvegarde d’un élément dans un fichier

path = 'A2310245.RPE'
fichier = open(path,'r')
txt=''
for i in fichier.readlines():
    if i[0] == 'E':
        txt = txt + i[60:70] + '\n'
result = open('result.txt','w')
result.write(txt)
result.close()
fichier.close()

ce code très simpliste permet:

  • ouvrir un fichier

  • pour chaque ligne vérifier que le premier élément est E

    • si oui récupère 10 caractères entre la position 60 et 70
  • ouverture d’un fichier de sauvegarde

  • sauvegarde du résultat

  • fermeture des fichiers

Note

On peut supprimer facilement les retours chariots avec la fonction txt=txt.rstrip()

une écriture plus intuitive

with open('A2310245.RPE', 'r') as f:
    txt = '\n'.join(f.readlines())
with open('result.txt', 'w' as f:
    f.write(txt)

Liste des fichiers

liste des fichiers contenus dans un répertoire

import os
os.listdir('c:/python24')

liste des fichiers (adresse complète) dans un répertoire

import glob
glob.glob('c:/python24/*')

est-ce un fichier? taille d’un fichier? supprimer un fichier?

os.path.isfile(path)
os.path.getsize(path)
os.remove(path)

path des fichiers

Le module os.path propose plusieurs fonctions simples d’utilisation pour récupérer les parties d’un nom de fichier:

  • dirname(path): retourne le répertoire associé au path
  • basename(path): retourne le nom simple du fichier (extension comprise)
  • split(path): retourne le couple (répertoire, nom du fichier)
  • splitdrive(path): retourne le couple (lecteur, chemin du fichier sans le lecteur)
  • splitext(path): retourne le couple (chemin du fichier sans l’extension, extension)
  • splitunc(path): retourne le couple (unc, rest) où unc est du type hostrépertoire partagé et rest le reste du path (cette fonction n’est valable que sous Windows)

déplacer un fichier

  • os.rename(src, dst) permet de renommer le fichier de chemin src en le fichier de chemin dst, le répertoire contenant le fichier de destination doit cependant déjà exister, une erreur étant sinon retournée.
  • os.renames(src, dst) permet de renommer le fichier src en dst tout en créant si nécessaire les répertoires contenant le fichier de destination.
  • Enfin shutil.move(src, dst) renomme exactement comme os.renames le fichier src en dst si le fichier de destination est sur le même système de fichiers. Autrement elle copie simplement src sur dst puis efface src

Si le fichier de destination se trouve sur le même système de fichiers, vous pouvez utiliser aussi bien les fonctions os.rename, os.renames que shutil.move sinon préférez shutil.move, les 2 autres fonctions pouvant échouer à leur tâche.

supprimer un fichier

un fichier os.remove(src)

un répertoire shutil.rmtree(src)

lister les fichiers

import glob
import os.path

def listdirectory(path):
    fichier=[]
    l = glob.glob(path+'\\*')
    for i in l:
        if os.path.isdir(i): fichier.extend(listdirectory(i))
        else: fichier.append(i)
    return fichier

recherche d’un élément dans des fichiers contenus dans un répertoire

import glob
import os.path
dir='C:/Users/f.aoustin.PROPLAST/Desktop/sylob'
filter=['.cil',]
search='activ'

def listdirectory(path):
    fichier=[]
    l = glob.glob(path+'\\*')
    for i in l:
        if os.path.isdir(i): fichier.extend(listdirectory(i))
        else: fichier.append(i)
    return fichier

f = open('result','w')
for i in listdirectory(dir):
    if os.path.splitext(i)[1] in filter:
        print 'SEARCH IN %s' % i
        lst = open(i,'r').readlines()
        txt = ''.join(lst)
        if search in txt:
            print 'FOUND IN %s ' % i
            f.write('%s\n' % i)
f.close()

information fichier

import os
statinfo = os.stat('somefile.txt')
print statinfo
print statinfo.st_size
import os.path, time
print "last modified: %s" % time.ctime(os.path.getmtime(file))
print "created: %s" % time.ctime(os.path.getctime(file))

Supprimer les fichiers d’un certains âge

on sélectionne les fichiers de plus d’une minute

import time
import os

seven_days_ago = time.time() - 60
folder = '/home/rv/Desktop/test'
os.chdir(folder)
for somefile in os.listdir('.'):
    st=os.stat(somefile)
    mtime=st.st_mtime
    if mtime < seven_days_ago:
        print('remove %s'%somefile)