
Python je multiplatformní jazyk oblíbený pro svou jednoduchost a stručnost. Jeho hlavní předností je srozumitelná a čistá syntaxe. Díky své jednoduchosti bývá označován jako jeden z nejvhodnějších programovacích jazyků pro začátečníky.
Odkazy na Literaturu k procvičování Pythonu, která je volně dostupná z internetu:
V Pythonu exstuje více způsobů, jak procházet a listovat adresáři. Vypíšu ty nejzákladnější funkce. Listovat můžeme pomocí:
Asi to nejzákladnější a nejvíce používanou funkcí pro listovaní soubory a adresáři je Listdir. Ukázka:
#!/usr/bin/env python3
import os
dirpath = '/data'
os.chdir(dirpath)
path = '%s' % (dirpath)
for file in os.listdir(path):
#if file.endswith(".*"):
print(os.path.join(dirpath, file))
V pythonu ještě existuje funkce Scandir, která dělá v podstatě to samé (byla přidaná později).
#!/usr/bin/env python3
import os
### Vypsani filu i adresaru
def my_scandir(dirpath):
with os.scandir(dirpath) as entries: # misto with jde pouzit: entries = os.scandir(dirpath) (a vyhodit cyklus)
for entry in entries:
print(entry)
### Vylistovani jen souboru
def my_scan_files_in_dir(dirpath):
with os.scandir(dirpath) as entries:
for entry in entries:
if entry.is_file():
print(entry)
### Vylistovani jen sub-adresaru
def my_scan_dirs_in_dir(dirpath):
with os.scandir(dirpath) as entries:
for entry in entries:
if entry.is_dir():
print(entry)
### info o mtime u souboru/adresare
def my_scan_mtime_in_dir(dirpath):
with os.scandir(dirpath) as entries:
for entry in entries:
info = entry.stat()
#print(info.st_mtime)
print(f'name: {entry.name}\tModified: {convert_date(info.st_mtime)}')
Os.walk se hodí pro rychlé rekurzivní procházení souborové struktury:
#!/usr/bin/env python3
import os
dirpath = '/tmp'
os.chdir(dirpath)
path = '%s' % (dirpath)
import os
for root, dirs, files in os.walk(path):
for file in files:
#if file.endswith(".txt"):
# spojeni cesty a jmena
print(os.path.join(root, file))
for root, dirs, files in os.walk(path):
for dir in dirs:
print(os.path.join(root, dir))
Aby byl návod úplný, zmíním ještě funkci Glob (i když ji osobně nepoužívám):
#!/usr/bin/env python3
import glob
import os
dirpath = '/data'
os.chdir(dirpath)
path = '%s' % (dirpath)
files = glob.glob(path + "**/", recursive=True)
for file in files:
print(file)
path = '%s' % (dirpath)
dirs = glob.glob(path + "**/*", recursive=True)
for dir in dirs:
print(dir)
Klasické otevření souboru, a zapsání něčeho:
#!/usr/bin/env python3
def my_read(filepath):
with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
data = f.read()
print(data)
def my_write(filepath):
with open(filepath, 'w', encoding='utf-8', errors='ignore') as f: # pokud chceme do souboru jen pridavat, a ne ho prepisovat, pouzijem "a"
data = 'a\nbb\nccc\ndddd'
f.write(data)
if __name__ == '__main__':
filepath = 'sample.txt'
data = my_write(filepath)
data = my_read(filepath)
K založení adresáře budeme potřebovat naimportovaný modul os. Pokud chceme založit jediný adresář pou6ijeme os.mkdir. Jestliže chceme založit adresář včetně podadresářů, používáme os.makedirs.
def my_mkdir(dirpath,dirname):
import os
access_rights = 0o755
try:
## one dir
os.mkdir(f'{dirpath}/{dirname}')
## with rights
#os.mkdir(path, access_rights)
## multiple dirs
#os.makedirs(f'{dirpath}/{dirname}/2018/10/05')
#except FileExistsError as exc:
# print(exc)
if __name__ == '__main__':
dirpath = '/tmp'
dirname = 'examples'
data = my_mkdir(dirpath,dirname)
K mazání adresářů je v Pythonu funkce os.rmdir.
#!/usr/bin/env python3
import os
path = "/tmp/year"
try:
os.rmdir(path)
except OSError:
print ("Deletion of the directory %s failed" % path)
else:
print ("Successfully deleted the directory %s" % path)
Občas pythonista potřebuje získat relativní a absolutní cestu k souboru, aktuální adresář a jiné vhodné proměnné.
def my_absolute_path(filepath):
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
print(dir_path)
print(os.path.basename(fpath))
def my_current_path(dirpath):
cwd = os.getcwd()
Zde je pár příladů, s určením cest k souborům:
__file__ constant#!/usr/bin/env python3
import os
print("Path at terminal when executing this file")
print(os.getcwd() + "\n")
print("This file path, relative to os.getcwd()")
print(__file__ + "\n")
print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")
print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")
print("This file directory only")
print(os.path.dirname(full_path))
Dočasné soubory mohou sloužit k ukládání proměnných. Jejich výhodou je, že když program skončí jsou zrušeny:
#!/usr/bin/env python3
### Nepojmenovane TemporaryFile
def my_tempfile():
from tempfile import TemporaryFile
# Create a temporary file and write some data to it.
# There is no need to give the temporary file a filename since it will be destroyed after the script is done running.
fp = TemporaryFile('w+t')
fp.write('Hello, Nice to meet you universe!')
# Go back to the beginning and read data from file
fp.seek(7)
data = fp.read()
print(data)
# Close the file, after which it will be removed, Once the file is closed, it will be deleted from the filesystem.
fp.close()
### Pojmenovane NamedTemporaryFile
def my_namedTempfile():
from tempfile import NamedTemporaryFile
fp = NamedTemporaryFile('w+t')
name = fp.name
fp.write('Hello, Nice to meet you universe!')
fp.seek(7)
data = fp.read()
print(data)
print(f'Jmeno souboru: {name}')
fp.close()
### Automaticke uvolneni
# TemporaryFile can be used in conjunction with the with statement. Using a context manager takes care of
# closing and deleting the file automatically after it has been read:
def auto_Tempfile():
from tempfile import TemporaryFile
with TemporaryFile('w+t') as tf:
tf.write('Hello universe!')
tf.seek(0)
print(tf.read())
### Docasny adresar (sice nevim k cemu to je dobre, ale pro uplnnost)
def auto_TempDir():
import tempfile
import os
with tempfile.TemporaryDirectory() as tmpdir:
print('Created temporary directory ', tmpdir)
os.path.exists(tmpdir)
if __name__ == '__main__':
#data = my_tempfile()
#data = my_namedTempfile()
data = auto_TempDir()
#data = auto_Tempfile()
Ke smazání souboru pužijeme os.remove:
import os
## If file exists, delete it ##
if os.path.isfile(myfile):
os.remove(myfile)
else: ## Show an error ##
print("Error: %s file not found" % myfile)
Je několik cest, jak zjistit délku souboru, pomocí os.path:
>>> import os
>>> b = os.path.getsize("/path/file.txt")
>>> b
2071611
Pomocí os.seek:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()