Retraitement de fichier CSV
Bonjour à tous,
J'ai écris un code python afin de vérifier la présence de plusieurs fichiers dans un repertoire et qui permet de supprimé les lignes vides de plusieurs fichiers csv. (==> Le code fonctionne très bien)
Mon souci provient du fait qu'un champ d'un fichier csv contient plusieurs lignes de données et je ne sais pas comment le traiter, peut être un souci d'encodage ? (en effet lorsque j'ouvre le csv avec Excel le champs en question contient un double quote au début (et pas à la fin), et Excel le voit bien comme un champ avec une seule information...
En l'ouvrant sous python, y'a plusieurs lignes dans le même champs...
Code:
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
| # Fonction de vérification des fichiers exportés
def verifier_fichier_export(fichier_parametre, chemin):
print('**************************************************')
print('Lancement de la fonction de verification des fichiers')
print('**************************************************')
log.info('START Verifier Fichier Export')
# Depart du timer pour compter le temps d'execution
depart_timer = time.perf_counter()
dossier = os.listdir(chemin)
data = pd.read_excel(fichier_parametre, sheet_name='X', engine='pyxlsb')
df = pd.DataFrame(data)
bool_var = False
for i in df.index:
fichier = df['Nouveau nom'][i]
if fichier not in dossier:
print(f'Le fichier "{fichier}" n est pas présent dans le dossier "{chemin}"')
log.info('Absence du fichier : ' + fichier + ' dans le repertoire ' + chemin)
bool_var = True
else:
if '.csv' in fichier:
#try:
csv.field_size_limit(100000000)
csv.field_size_limit()
file_object = open(chemin + fichier, 'r', encoding="cp437")
lines = csv.reader(file_object, delimiter=';', quotechar='"')
flag = 0
data = []
num_ligne = 1
# Pour chaque ligne du fichier csv
for line in lines:
num_ligne = num_ligne + 1
# On vérifie si tous les champs sont vides
var = 0
for obj in line:
if ('"' in obj) and (obj.count('"') == 1) and (obj.count(';') > 3):
obj = obj.replace('"', '')
for el in obj.split(";"):
obj = el
if obj == '':
var = var + 1
# Si tous les champs sont vides alors on ne prends pas la ligne vide
if len(line) == var:
print("Suppression de la ligne vide numéro", num_ligne, 'du fichier', fichier)
flag = 1
continue
else:
data.append(line)
file_object.close()
if flag == 1: # if blank line is present in file
file_object = open(chemin + fichier, 'w')
for line in data:
file_object.write(';'.join(line) + "\n")
file_object.close()
#except Exception as e:
#print(e, fichier, num_ligne)
# On arrête la poursuite du traitement s'il manque des fichiers
if bool_var == True:
sys.exit()
log.info('END Verifier Fichier Export : un ou plusieurs fichiers sont manquants')
print('Arrêt du programme car un ou plusieurs fichiers sont manquants pour permettre de poursuivre le traitement')
else:
# Temps d'execution du programme
fin_timer = time.perf_counter()
temps_timer = (fin_timer - depart_timer)
print('Les fichiers sont tous présents dans le dossier.')
print(f'Tache terminée en {temps_timer:0.4f} secondes.')
log.info('END Verifier Fichier Export') |
Merci d'avance pour votre aide.
GK