1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# Python 2.7
import sys, os
nfc = 'ficid.txt'
srep = 'srep'
# effacement des fichiers du sous-répertoire srep s'il y en a
import glob
for nf in glob.iglob(os.path.join(srep, "[0-9][0-9]*.txt")):
os.remove(nf)
# garde le numéro du dernier fichier enregistré pour chaque id
# exemple: didf = {'45': '00007'} => dernier fichier: 4500007.txt
didf = {}
# accumule les lignes (10 maxi) dans la liste liée à la clé 'ID'
# exemple: dido = {'45': ['45XXX', '45YYY', ..., '45ZZZ']}
dido = {}
with open(nfc, 'r') as fr:
for ligne in fr:
# ID = les 2 premiers caractères de la ligne
id = ligne[:2]
# voir si on a déjà rencontré l'ID
if not id in dido:
dido[id] = [] # non: créer la liste vide
# on ajoute la ligne à la liste
dido[id].append(ligne)
# enregistrement sur disque si la liste est pleine
if len(dido[id])==10:
# oui, la liste est pleine
# on détermine le numéro à partir du précédent numéro enregistré
if id in didf:
num = "%0.5d" % (int(didf[id])+1,)
else:
num = "00001" # l'ID n'existe pas encore: on commence à 00001
# on enregistre le nouveau fichier avec les lignes de la liste
nf = os.path.join(srep, id+num+'.txt')
with open(nf, 'w') as fw:
for elem in dido[id]:
fw.write(elem)
# on met à jour le dernier numéro enregistré pour l'ID
didf[id] = num
# et on détruit la liste qu'on vient d'enregistrer sur disque
dido.pop(id)
# il faut enregistrer les derniers fichiers incomplets
for id in dido:
# on détermine le numéro à partir du précédent numéro enregistré
if id in didf:
num = "%0.5d" % (int(didf[id])+1,)
else:
num = "00001"
# on enregistre le nouveau fichier avec les lignes de la liste
nf = os.path.join(srep, id+num+'.txt')
with open(nf, 'w') as fw:
for elem in dido[id]:
fw.write(elem) |
Partager