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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
| import os.path
from os import chdir # Pour chargement des images dans autre répertoire chdir = chg de répertoire
import tkinter
from tkinter import *
from tkinter import filedialog, font # Pour module de recherche de dossiers
from math import *
# ____________________________________________________________________________________________________________________
fen1 =Tk()
# ____________________________________________________________________________________________________________________
# Chargement des images
NOMDOS = os.getcwd() # Nom du dossier courant
chdir(NOMDOS + '\Images') # Chg de répertoire courant pour charger les images
PHOTO4 = PhotoImage(file='Icone30x30_Exit.png')
PHOTO5 = PhotoImage(file='Icone30x30_valid.png')
PHOTO1 = PhotoImage(file='Icone30x30_7Texte.png')
chdir(NOMDOS) # Chg de répertoire courant pour revenir a la normale
# ____________________________________________________________________________________________________________________
# Les variables
varCoulPrinc = "Dim Gray"
varCoulSecond = "Light Slate Gray"
FICHIER = ""
DOSSIER = ""
# ____________________________________________________________________________________________________________________
# Les fonctions
# ____________________________________________________________________________________________________________________
def recherche():
"""Lance la fenêtre de recherche de fichier"""
global FICHIER
global CHEMIN
global DOSSIER
fen2 = Toplevel
fen2.filename = filedialog.askopenfilename (title="Selection fichier d'entrée") # fen2.filename : indique le dossier avec son chemmin
LabelChemin1.configure(text= fen2.filename) # inscription du dossier dans le label
#Extraction du nom du fichier seul
from os.path import basename
FICHIER = basename (fen2.filename)
DOSSIER = fen2.filename.strip(FICHIER)
CHEMIN = DOSSIER + FICHIER
def recherche2():
"""Lance la fenêtre de recherche de fichier"""
global FICHIER2
global CHEMIN2
global DOSSIER2
fen3 = Toplevel
fen3.filename = filedialog.askdirectory (title="Selection dossier de sortie") # fen2.filename : indique le dossier avec son chemmin
LabelChemin2.configure(text= fen3.filename) # inscription du dossier dans le label
#Extraction du nom du fichier seul
from os.path import basename
FICHIER2 = basename (fen3.filename)
DOSSIER2 = fen3.filename.strip(FICHIER)
CHEMIN2 = DOSSIER + FICHIER
def verif():
# Récupération nombre de découpe dans variable varNbDecoup
varNbDecoup = NbDecoup.get ()
# Changement du type de la variable en integer
varNbDecoup = int (varNbDecoup)
# Vérification que le nombre de découpe ne soit pas inférieur à 1
if varNbDecoup<1:
from Fonctions.FoncMesAlerte1button import foncFenAlerte1Choix
foncFenAlerte1Choix ("Alerte", "Attention, vous demandez de couper ce fichier \navec un nombre inférieur à 1, c'est impossible,\nmerci de modifier ce nombre puis relancez !")
else:
# Ouverture fichier
fd = open (CHEMIN, 'r')
# Boucle pour compter le nombre de lignes
NumberOfLine = 0
for line in fd:
NumberOfLine += 1
# Calcul du nombre de fichier en arrondi.sup
varNbFichier = ceil(NumberOfLine/varNbDecoup)
# Là on a :
# Fichier d'entrée : FICHIER ex: 100 lignes.txt
# Le chemin du dossier d'entrée: DOSSIER ex: C:/Users/jm.aix/Desktop
# Le chemin total entrée: CHEMIN ex: C:/Users/jm.aix/Desktop/100 lignes.txt
# Fichier sortie : FICHIER2 ex: 100 lignes.txt
# Le chemin du dossier sortie: DOSSIER2 ex: C:/Users/jm.aix/Desktop
# Le chemin total sortie: CHEMIN2 ex: C:/Users/jm.aix/Desktop/100 lignes.txt
# le nb de lignes du fichier : NumberOfLine ex: 100
# Le nb de découpe à faire : varNbDecoup ex: 50
# Le nb de fichiers de sorties : varNbFichier ex: 2
# ________________________________________________
# Ouverture fichier
# ________________________________________________
with open (CHEMIN, 'r') as a:
# Lecture de la totalité et récup dans variable txtTotal
txtTotal=a.read()
# ________________________________________________
# Création liste
# ________________________________________________
lstTotal = []
lstTotal=txtTotal.split("\n")
# ________________________________________________
# Découpe en plusieurs fichiers
# ________________________________________________
bb= []
debutSeq = 0
finSeq = varNbDecoup
for e in range(varNbFichier): # Séquence sur tant de fichiers : varNbFichier
# Création séquence
bb=lstTotal[debutSeq:finSeq]
debutSeq= finSeq
finSeq= finSeq + varNbDecoup
# Définition des noms de dossiers
NomFichSORT = DOSSIER2 + 'test' + str(e) + '.txt'
# Ouverture fichier
Fichier = open (NomFichSORT, 'w')
# Changement liste en texte : #\n pour retour à la ligne à chaque valeur
aa= "\n".join(bb)
# Ecriture dans fichier texte
Fichier.write (aa)
# Fermeture fichier
Fichier.close ()
# ________________________________________________
# Message indiquant la finalité ok
# ________________________________________________
from Fonctions.FoncMesAlerte1button import foncFenAlerte1Choix
foncFenAlerte1Choix ("Extraction terminée", "Vos fichiers sont crées à l'emplacement choisi !")
# ____________________________________________________________________________________________________________________
# ____________________________________________________________________________________________________________________
# Création fenêtre principale
fen1.geometry('298x310')
fen1.configure(bg = varCoulPrinc)
fen1.title("Découpe de fichiers")
# ________________________________________________
# Créations - Labels
LabelTexte = Label(fen1 ,height=1 ,width=40, heigh = 2, bg =varCoulPrinc, text = "Choisissez le nombre de lignes par découpe.")
LabelTexte2 = Label(fen1 ,height=1 ,width=40, heigh = 4, bg =varCoulPrinc, text = "Choisissez via les boutons de recherche,\nle fichier à découper (fichier texte).\net le dossier des fichiers de sorties.\nPuis validez.")
LabelTexte3 = Label(fen1 ,height=1 ,width=40, bg =varCoulPrinc, text = "Fichier d'entrée")
LabelTexte4 = Label(fen1 ,height=1 ,width=40, bg =varCoulPrinc, text = "Dossier de sortie")
LabelChemin1 = Label(fen1 ,height=1 ,width=40, bg =varCoulSecond, relief='ridge')
LabelChemin2 = Label(fen1 ,height=1 ,width=40, bg =varCoulSecond, relief='ridge')
# ________________________________________________
# Création - Button Recherche
butRecher1 =Button(fen1, image=PHOTO1, relief='flat', bg = varCoulPrinc, command = recherche)
butRecher2 =Button(fen1, image=PHOTO1, relief='flat', bg = varCoulPrinc, command = recherche2)
# Création - Champ Nb de découpe
NbDecoup =Entry(fen1)
NbDecoup.width=24
# Création - Button Validation
butValid =Button(fen1, image=PHOTO5, relief='flat', bg = varCoulPrinc, command=verif)
# Création - Button EXIT
butExit =Button(fen1, image=PHOTO4, relief='flat', bg = varCoulPrinc, command=fen1.destroy)
# ________________________________________________
# POSITIONNEMENTS 1
LabelTexte.grid(row=0, padx=5, pady=2)
NbDecoup.grid(row=1, padx=5, pady=2)
LabelTexte2.grid(row=2, padx=5, pady=2)
LabelTexte3.grid(row=3, padx=5, pady=(15,0), sticky="W")
butRecher1.grid(row=4, padx=5, sticky="W")
LabelChemin1.grid(row=4, padx=5)
LabelTexte4.grid(row=5, padx=5, sticky="W")
butRecher2.grid(row=6, padx=5, sticky="W")
LabelChemin2.grid(row=6, padx=5)
butValid.grid(row=10, pady = 10, padx = 50, sticky="E")
butExit.grid(row=10, pady = 10, padx = 5, sticky="E")
# ________________________________________________
# Centrage fenêtre
from Fonctions.FoncCentreEcran import centreFenetre
centreFenetre(fen1)
# Focus sur NbDecoup
NbDecoup.focus_set()
# Réception d'événements
fen1.mainloop() |