Bonjour,
je n'arrive pas à me défaire d'un problème d'encodage (apparemment)
mon application se sert d'un csv pour générer un dataframe via ces lignes de codes:
cette dataframe je la charge dans un qtablewidget (pyqt5) pour en afficher certaines partie et éventuellement en modifier certaines "cellules/item".Code:
1
2
3
4
5
6 with open(r"L:\Demande_Globale_V17\Data_Base.csv", "rb") as fp: self.encoding_used = chardet.detect(fp.read()) with open(r"L:\Demande_Globale_V17\Data_Base.csv", newline='', encoding = self.encoding_used['encoding']) as csvfile: self.ui.dataframe_from_csv = pd.DataFrame(csv.reader(csvfile, delimiter=';')) self.ui.dataframe_from_csv.columns = self.ui.dataframe_from_csv.iloc[0] self.ui.dataframe_from_csv = self.ui.dataframe_from_csv.drop(0)
le chargement de la dataframe dans le qtablewidget se fait "simplement" en balayant chaque colonne de chaque ligne de la dataframe pour y associer un item via:
j'ai associé au itemchanged de mon QTableWidget la méthode suivante:Code:
1
2
3 for i in range(0, nb_lignes, 1): for j in range(0, self.columnCount(), 1): self.setItem(i, j, QTableWidgetItem(str(self.ui.dataframe_from_csv.iloc[i, j])))
et j'ai droit à l'erreur suivante:Code:
1
2
3
4
5 def cellchanged(self, item): ligne_modifiee = self.currentRow() colonne_modifiee = self.currentColumn() self.ui.dataframe_from_csv.iloc[ligne_modifiee, colonne_modifiee] = self.item(ligne_modifiee, colonne_modifiee).text() self.ui.dataframe_from_csv.to_csv(path_or_buf="Data_Base.csv", sep=';', mode='w', index = False, encoding = self.encoding_used['encoding'])
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2019' in position 437: ordinal not in range(256)
j'ai essayé de forcer l'encodage en utf-8 (de la création du csv, à son enregistrement mais ça n'arrange rien...)... c'est même pire car en ouvrant les csv avec excel (si besoin) tous les caractères avec accents sont "louches". et puis j'avais une erreur de type:
"SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame"
bref je m'en sors pas... l'encodage qui est utilisé derrière le "self.encoding_used['encoding']" c'est: ISO-8859-1
avez vous une idée pour rendre un truc qui tourne bien?
le but est de mettre à jour la dataframe en fonction des modification effectuées directement dans le Qtablewidget...
merci!