- leir,
Bonjour, voilà je me frotte depuis quelques temps à python et j’essaie de me créer quelques utilitaires. J’en ai un qui va parcourir un fichier Excel et qui va regarder, pour chaque cellule, s’il y a une occurence dans le deuxième. Le truc fonctionne, mais c’est lent (il me faut plusieurs minutes pour deux fichiers de 50k cellules occupées chacun). Je me demandais s’il y avait moyen d’optimiser ça. J’ai tenté d’utiliser filter() et intersection(), mais je ne m’en sors pas. Je ne demande pas un code tout fait, mais des pistes seraient bienvenues.
Voilà le code qui fonctionne :
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 | # coding: utf-8 import pyexcel as p def define_files_to_check(): file_name1 = input('Entrez le nom du 1er fichier :') file_name2 = input('Entrez le nom du 2ème fichier :') return { 'sheet1': p.get_array(file_name=file_name1), 'sheet2': p.get_array(file_name=file_name2), } def check_if_cells_match(cell1, cell2): """ Return True if 2 cells have the same content (not type) """ if cell1 == cell2 and cell1 != '' and cell2 != '': return True def browse_spreadsheet_rows(sheet1, sheet2): """ Loop trough 2 worksheets to compare all cells """ cells_checked_count = 0 matches = [] for row_first_sheet in sheet1: for cell_first_sheet in row_first_sheet: cells_checked_count += 1 if cells_checked_count%250 == 0: print('({} cells checked)'.format(cells_checked_count)) for row_second_sheet in sheet2: for cell_second_sheet in row_second_sheet: if check_if_cells_match(cell_first_sheet, cell_second_sheet): if cell_first_sheet not in matches: print('MATCH : {} ({} cells checked)'.format(cell_first_sheet, cells_checked_count)) matches.append(cell_first_sheet) print('FINISHED : {} cells checked'.format(cells_checked_count)) sheets = define_files_to_check() browse_spreadsheet_rows(sheets['sheet1'], sheets['sheet2']) |
Merci pour vos conseils !
+0
-0