Deprecated: Joomla\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 41

Deprecated: Return type of Joomla\Input\Input::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 170

Deprecated: Joomla\CMS\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Input.php on line 31

Deprecated: Joomla\CMS\Input\Cookie implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Cookie.php on line 0

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /home/adatpcom/public_html/libraries/src/Uri/Uri.php on line 141
Python - Egy mappa tartalmának kilistázása

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21
Python - Egy mappa tartalmának kilistázása

Python - Egy mappa tartalmának kilistázása

A minap azzal találtam magam szembe, hogy egy mappában lévő shapefájlokról (ezekről olvashatsz a Webes térinformatika - PaciTrip 2. rész (Téradatok előkészítése) cikkünkben is) kellett listát kreálnom, mert ha már átküldöm azokat kollégáknak, egyrész tudják, hogy mit kapnak, másrészt, némi magyarázatot is fűzhetek a lista elemeihez. Na persze nem egy-két, hanem több mint harminc shapefájlról volt szó. Ilyen mennyiségnél az ember már inkább elkezd automatizált megoldásban gondolkodni, mint hogy elkezdjen egyesével gyűjtögetni. Utóbbinak a kényelmetlenségen kívül a nagyobb hibázási lehetőség is meglehetős hátránya. Tehát mi lenne, ha írnék egy Python szkriptet?

Ez lett belőle:

1. Python szkript esetén először be kell hívni az os modult, amely lehetővé teszi olyan műveletek elvégzését, amelyekért az operációs rendszer a felelős, pl. fájlok kezelése: “import os”.

import os

2. Aztán kell a mappa, aminek a tartalmát ki akarjuk listázni: ennek elérése legyen most egyszerűen a „path”. Fontos, hogy Python esetében az elérési útnál a \ helyett /-t kell használni!

import os
path = 'C:/sok_shape'

3. Aztán szükség lesz a mappa tartalmának listázására: „listdir”. A listdir bemenetként egy könyvtár elérési útvonalát várja, kimenetként pedig az abban található mappák és fájlok nevét adja vissza.

import os
path = 'C:/sok_shape'
files = os.listdir(path)

4. És már csak egy ciklusra van szükség, ami végig fut a lista elemein (“file”), és kiírja a shapefájlok neveit (kiterjesztés nélkül), de csak egyszer. Na itt álljunk meg egy pillanatra! Miért írtam, hogy „csak egyszer”? Mert a shapefájl olyan téradatformátum, amelynek – a cikk témája szempontjából legérdekesebb – sajátossága, hogy egy shapefájlhoz minimum 3 fájl tartozik, amihez további 9 társulhat. Ezek csak együtt eredményezik a shapefájl megfelelő használhatóságát. Az egy shapefájlhoz tartozó fájlok elnevezése azonos, kiterjesztésük különbözik (pl. cpg, dbf, prj, sbn, sbx, shp, shx, xml).

A ciklusmag először feldarabolja a fájlnevet a megadott karakter (separator) mentén: „split”. Így egy lista készül a háttérben a darabokból, amelyeket az indexük alapján azonosíthatók. Jelen esetben a fájlnevet („fname”) az első – azaz Python szkriptben 0. – darabban találjuk, a nekünk kellő kiterjesztést (“ext”) a Python szkriptben -1., vagyis hátulról az első darabban.

SHP kiterjesztésű fájl minden esetben tartozik a shapefájlhoz, így teljes listát kapunk, ha azokat íratjuk ki: „print”. A print az utána lévő zárójelben megadott objektumot írja ki.

import os
path = 'C:/sok_shape'
files = os.listdir(path)
for file in files:
    parts = file.split('.')
    fname = parts[0]
    ext = parts[-1]
    if ext == 'shp':
        print (fname)

A script az utolsó két sor elhagyásával egyéb fájlok kilistázására is felhasználható, továbbá mappák elnevezéseinek listázást is végrehajtja.

Aki a fájlistát inkább Excelben használná vagy az Excel-makrók világa közelebb áll hozzá, feltétlenül nézze meg a Excel makró - Lista készítése egy mappában található fájlokról cikkünket.


Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21