To_Json --> Umlaute nicht als Unicode darstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TimMolb
User
Beiträge: 3
Registriert: Mittwoch 10. Juni 2020, 13:01

Hallo zusammen,

ich habe eine Frage zu folgendem Python-Script. Das Script fügt für jede Zeile eines Excel-Arbeitsblattes die Texte einzelner Zellen im Json-Format in der letzten Spalte der Excel-Datei zusammen. Funktioniert alles wunderbar. Einziges Problem ist, dass Umlaute und Sonderzeichen in Unicode-Ausdrücken (z.B. \u00f6 ) dargestellt werden, ich bräuchte sie jedoch ganz normal als Umlaute und Sonderzeichen (z.B. ö oder é).

Wie kann ich den Code entsprechend anpassen? Vielen Dank im Voraus für eure Hilfe.

# -*- coding: utf-8 -*-
"""
Created on Wed Jun 10 13:22:37 2020

@author: Acer
"""
import pandas as pd
import xlwings as xw
#open currently active workbook and navigate to calculation sheet
wb = xw.books.active
ws_searchdata=wb.sheets('Tabelle1')

#get target column for json
column_headers_xls = list((ws_searchdata.range('A1').options(expand='horizontal').value))
column_headers_dict = { column_headers_xls : i for i in range(0, len(column_headers_xls) ) }
col_json_data=column_headers_dict['data']+1

#read in dataframe from excel file, first column must have values
df= ws_searchdata.range('A1').options(pd.DataFrame, expand='table', header=1).value
df.drop(["identitytype", "idworkstatus", "idlanguage", "idowner", "idrelevance", "tsindexed", "desc", "values", "clarification", "extra3", "extra4"], axis = 1, inplace=True)

# iterate over rows in data frame with iterrows() and convert to json, collect in a list
json_data=[]
for index, row in df.iterrows():
json_data.append(row.iloc[:-1].to_json(orient='index'))

#write back to excel file
ws_searchdata.range(2, col_json_data).options(transpose=True).value=json_data
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TimMolb: Die `to_json()`-Methode hat da ein Argument für.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
TimMolb
User
Beiträge: 3
Registriert: Mittwoch 10. Juni 2020, 13:01

__blackjack__ hat geschrieben: Mittwoch 10. Juni 2020, 14:08 @TimMolb: Die `to_json()`-Methode hat da ein Argument für.
Das habe ich mir schon fast gedacht ;) Aber weißt du zufällig auch welches? Habe ausgiebig recherchiert aber nichts gefunden.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie weit ging denn Deine ausgiebige Recherche?
Welche Option könnte nun dafür verantwortlich sein, dass keine Unicode-Zeichen verwendet werden, sondern alles ASCII-kodiert wird?

Code: Alles auswählen

row.to_json(
    path_or_buf=None,
    orient=None,
    date_format=None,
    double_precision=10,
    force_ascii=True,
    date_unit='ms',
    default_handler=None,
    lines=False,
    compression='infer',
    index=True,
)
TimMolb
User
Beiträge: 3
Registriert: Mittwoch 10. Juni 2020, 13:01

Okay dummer Fehler, hatte es mit force_ascii=True probiert, da ich ja ascii haben möchte. Mit False ging es dann ;)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TimMolb: Du möchtest *nicht* ASCII haben. ASCII enthält keine Umlaute. Das A steht für American. Umlaute haben die in ihrem Alphabet nicht.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten