QGIS - czy można konwertować znaki akcentowane na zwykłe w tabeli atrybutów? [Zamknięte]

9

Mam zestaw danych OSM zawierający nazwy ze znakami narodowymi (jest to eksport CSV, ale mam go w SHP):

osm_id,code,fclass,population,name,longitude,latitude
276645544,1003,village,221,Krč,14.248410,49.194988
444571400,1003,village,88,Radonice,14.548085,49.143251
488567474,1003,village,115,Doubravka,14.363835,49.282158
488567478,1003,village,114,Koloměřice,14.399437,49.280328
488567484,1003,village,111,Údraž,14.309249,49.281551
491452727,1004,hamlet,33,Poněšice,14.481200,49.105121
601855465,1003,village,147,Hvožďany,14.433230,49.286094
631878480,1003,village,211,Myšenec,14.208999,49.223213

i chciałbym przekonwertować je do tego formularza:

osm_id,code,fclass,population,name,longitude,latitude
276645544,1003,village,221,Krc,14.248410,49.194988
444571400,1003,village,88,Radonice,14.548085,49.143251
488567474,1003,village,115,Doubravka,14.363835,49.282158
488567478,1003,village,114,Kolomerice,14.399437,49.280328
488567484,1003,village,111,Udraz,14.309249,49.281551
491452727,1004,hamlet,33,Ponesice,14.481200,49.105121
601855465,1003,village,147,Hvozdany,14.433230,49.286094
631878480,1003,village,211,Mysenec,14.208999,49.223213

gdzie akcenty są usuwane, więc zamiast „č, š, ř, á” itd. masz „c, s, r, a”. Nie muszę edytować bieżącej kolumny - może tworzyć nową kolumnę z przekonwertowanymi nazwami.

Obecnie zamierzam użyć jakiegoś narzędzia online, takiego jak to, do pliku CSV, ale byłoby świetnie, gdybym mógł rozwiązać to bezpośrednio w QGIS.

Juhele
źródło
1
dlaczego poza tematem? Pytam przede wszystkim o bezpośrednie rozwiązanie w QGIS bez konieczności eksportowania moich danych do CSV i importowania ponownie.
Juhele,

Odpowiedzi:

9

Tak, jest to możliwe dzięki bibliotece unidecode w Pythonie ... ( dokumentacja ). Próbuje znaleźć najbliższy odpowiednik ASCII dla każdego znaku Unicode.

from unidecode import unidecode

s="""
osm_id,code,fclass,population,name,longitude,latitude
276645544,1003,village,221,Krč,14.248410,49.194988
444571400,1003,village,88,Radonice,14.548085,49.143251
488567474,1003,village,115,Doubravka,14.363835,49.282158
488567478,1003,village,114,Koloměřice,14.399437,49.280328
488567484,1003,village,111,Údraž,14.309249,49.281551
491452727,1004,hamlet,33,Poněšice,14.481200,49.105121
601855465,1003,village,147,Hvožďany,14.433230,49.286094
631878480,1003,village,211,Myšenec,14.208999,49.223213
"""

print(unidecode(s))

wynik:-

osm_id,code,fclass,population,name,longitude,latitude
276645544,1003,village,221,Krc,14.248410,49.194988
444571400,1003,village,88,Radonice,14.548085,49.143251
488567474,1003,village,115,Doubravka,14.363835,49.282158
488567478,1003,village,114,Kolomerice,14.399437,49.280328
488567484,1003,village,111,Udraz,14.309249,49.281551
491452727,1004,hamlet,33,Ponesice,14.481200,49.105121
601855465,1003,village,147,Hvozdany,14.433230,49.286094
631878480,1003,village,211,Mysenec,14.208999,49.223213

Ten kod przekonwertuje jeden plik CSV na inny: -

from unidecode import unidecode
with open("/path/to/original.csv", "r") as input_file:
    with open("/path/to/converted.csv","w") as output_file:
        output_file.write(unidecode(input_file.read()))
Steven Kay
źródło
1
Hmm, wygląda na to, że nie mogę uniknąć eksportu do CSV i importowania z powrotem. Prawdopodobnie zasugeruję taką funkcję jak ulepszenie QGIS.
Juhele,
Możesz uniknąć tworzenia pliku csv, jeśli używasz kalkulatora pola python. Najpierw musisz zainstalować bibliotekę w pythonie QGIS. Oto opis. Następnie możesz użyć zaawansowanego kalkulatora pól Pythona. Globalny będzie from unidecode import unidecodei formuła będzievalue = unidecode(<name>)
Corentin Lemaitre