Forum QGIS
Export tabeli do pliku *txt - Wersja do druku

+- Forum QGIS (http://forum.quantum-gis.pl)
+-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html)
+--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html)
+--- Wątek: Export tabeli do pliku *txt (/thread-1872.html)



Export tabeli do pliku *txt - guziec88 - 22-04-2020

Cześć,

potrzebuję pomocy odnośnie automatycznego exportu tabeli to *txt. Moja tabela zawiera kolumny "Godlo", "param1","param2","param3","param4". W jaki sposób zrobić export aby powstały mi pliki *txt gdzie nazwą plików  będzie wartość pola danego rekordu  w kolumnie "Godlo", a w pliku zawarte będą wartości z pozostałych kolumn oddzielone np. "enterem" ??

pozdrawiam


RE: Export tabeli do pliku *txt - xmaziax - 22-04-2020

Skrypt w Pythonie chyba najszybciej


RE: Export tabeli do pliku *txt - guziec88 - 22-04-2020

istnieje szansa na jakąś podpowiedź ?


RE: Export tabeli do pliku *txt - xmaziax - 23-04-2020

Wg mnie do takich rzeczy można najlepiej użyć pythona - musisz napisać skrypt w tym języku.
Zakładam, że masz jakąś warstwę otwartą w QGIS np. shp z tymi danymi i z niej chcesz je "wypluć".
Skrypt powinien iterować po wierszach tabeli warstwy, z kolumny z nazwą pliku pobierasz nazwę i w określonej lokalizacji tworzysz taki plik.
Do niego zapisujesz wartości z kolejnych atrybutów itp.
I tak w pętli po wszystkich wierszach.

To kilka linijek kodu tak na oko np. to co poniżej, ale musisz sobie już zmodyfikować pod siebie,

Np takie coś:
U mnie tabela miała 6 kolumn id, nazwa pliku (w kolumnie o indeksie 1)  i 4 atrybuty (indeksy od 2 do 5)
Musisz mieć zaznaczoną warstwę aktywną i założony folder wyjścia. Działa na QGIS3

Kod:
lyr = iface.activeLayer()
features = lyr.getFeatures()
sciezka = 'c:/temp/gen_plikow/'
for feat in features:    
   atrybuty = feat.attributes()
   with open(sciezka + atrybuty[1] + '.txt' , 'w') as raport:
       raport.write(atrybuty[2]+'\n')
       raport.write(atrybuty[3]+'\n')
       raport.write(atrybuty[4]+'\n')
       raport.write(atrybuty[5])



RE: Export tabeli do pliku *txt - guziec88 - 24-04-2020

Dziękuję !!!
Wpisałem powyższy kod, dostosowałem do swojej tabeli wygląda to tak:

lyr = iface.activeLayer()
features = lyr.getFeatures()
sciezka = 'c:/temp/gen_plikow/'
for feat in features:
atrybuty = feat.attributes()
with open(sciezka + atrybuty[GODLO] + '.txt' , 'w') as raport:
raport.write(atrybuty[1]+'\n')
raport.write(atrybuty[2]+'\n')
raport.write(atrybuty[3]+'\n')
raport.write(atrybuty[4]+'\n')
raport.write(atrybuty[5]+'\n')
raport.write(atrybuty[6])


Lecz po uruchomieniu skrypku wyskakuje mi błąd przetwarzania:

Traceback (most recent call last):
File "C:/PROGRA~1/QGIS3~1.10/apps/qgis/./python/plugins\processing\script\ScriptEditorDialog.py", line 224, in runAlgorithm
exec(self.editor.text(), _locals)
File "<string>", line 1, in <module>
NameError: name 'iface' is not defined


co mogę robić źle ?


RE: Export tabeli do pliku *txt - xmaziax - 24-04-2020

A gdzie to wpisujesz?

Z poziomu edytora pythona w QGis powinno to działać normalnie.
W starszych wersjach należało importować, z tego co pamiętam.



Na początek możesz to dodać:

Kod:
from qgis.utils import iface

GODLO zamień na numer kolumny z warstwy ( liczony od 0) - u mnie to była 2 kolumna  dlatego wpisałem 1
Folder  'c:/temp/gen_plikow/' założyłem wcześniej
Te wszystkie wcięcia są ważne, musisz to mieć tak jak w tym co wkleiłem.

Kod:
from qgis.utils import iface
lyr = iface.activeLayer()
features = lyr.getFeatures()
sciezka = 'c:/temp/gen_plikow/'
for feat in features:
  atrybuty = feat.attributes()
  with open(sciezka + atrybuty[0] + '.txt' , 'w') as raport:
      raport.write(atrybuty[1]+'\n')
      raport.write(atrybuty[2]+'\n')
      raport.write(atrybuty[3]+'\n')
      raport.write(atrybuty[4]+'\n')
      raport.write(atrybuty[5]+'\n')
      raport.write(atrybuty[6])




zdjęcie


RE: Export tabeli do pliku *txt - guziec88 - 24-04-2020

Folder założyłem tak jak w kodzie, poprawiłem tak jak napisałeś. Dalej jest błąd - plik w załączniku. Może ma to związek z rodzajem pól ? Pierwsza kolumna to string reszta double...


RE: Export tabeli do pliku *txt - xmaziax - 24-04-2020

Kod:
raport.write(str(atrybuty[2])+'\n')



RE: Export tabeli do pliku *txt - guziec88 - 25-04-2020

Działa ! Wink Dziękuję za pomoc i cierpliwość !