2017-12-14 1 views
0

Ich habe eine Python-Anwendung, die die Bokeh-Bibliothek verwendet, um ein Google Maps-Diagramm mit GMapPlot anzuzeigen. Um den Kartenstil mit GMapOptions zu ändern, lese ich this .JSON-Datei, die lokal bei ./map/styles.JSON gespeichert und konvertiert es in eine Zeichenfolge. Auf Win10 funktioniert dies gut mitÖffnen von .JSON-Datei schlägt auf Ubuntu fehl

with open(r"./map/styles.JSON", encoding='utf-8-sig') as file: 
    styles = file.read().splitlines() 
styles="".join(styles) 

Allerdings, wenn ich die Anwendung auf einem Ubuntu-Server läuft ein Fehler

Traceback (most recent call last): 
File "photo_map.py", line 22, in <module> 
with open(r"./map/styles.JSON", encoding='utf-8-sig') as file: 
TypeError: 'encoding' is an invalid keyword argument for this function 

Ohne die Codierung Anweisung erhöht ein neuer Fehler

wird
ValueError: expected JSON text, got '\xef\xbb\xbf[... 
..."#dadada"\r\n   }\r\n  ]\r\n }\r\n]' 
angehoben

Ich habe auch versucht, mit dem JSON-Modul und decode() -Methode ohne Erfolg zu arbeiten.

Das Deklarieren einer Variablen in meinem Python-Skript, das die .JSON-Daten als String enthält, funktioniert auf Win10 und Ubuntu einwandfrei, ist aber offensichtlich nur ein Workaround.

Danke für Ihre Hilfe!

+1

Sind Sie sicher, dass der Ubuntu-Server Python 3.x ausführt? –

+0

Sie führen es mit Python 2.x. Versuchen Sie: 'mit codecs.open (" ./ map/styles.JSON "," utf-8 ") als Datei: ...' (Vergessen Sie natürlich nicht, 'Codecs' zu importieren). – zwer

Antwort

0

Versuchen Sie, diese

with open("./map/styles.JSON", "rb") as file: 
    styles = file.read().decode("utf-8-sig").splitlines() 
0

ich vor kurzem hatte ein ähnliches Problem und verwendet https://jsonlint.com/ die JSON-Datei zu überprüfen. Das Problem: Windows gab die Datei EOL (Ende der Zeile) Zeichen, die Linux nicht verwendet. Die Lösung: Ich habe die Datei in Notepad geöffnet ++ aus dem Menü - Bearbeiten >> EOL-Konvertierung >> Unix (LF)

0

Python 3 hat die encoding Schlüsselwort für open() aber Python 2 nicht.

Sie müssen wahrscheinlich sicherstellen, dass Sie das Skript in Python 3 ausführen, wenn das der richtige Zweck ist. Auf vielen Servern bezieht sich python immer auf Python 2 und die Python 3-Binärdatei heißt python3.

Verwandte Themen