Dosya İşlemleri, Unix, Python
Genel ihtiyaca dönük Python'da yapılabilecek dosya işlemleri;
Bir dosya, dizin mevcut mu?
import os
print (os.path.exists("/tmp/filan1"))
False
Bir dizini yaratmak için
os.mkdir("/tmp/filan1")
print (os.path.exists("/tmp/filan1"))
True
Python ile dosya işlemleri yaparken, komut işletirken o anda içinde olunan bir dizin var; bu dizini değiştirmek için
os.chdir("/tmp/filan1")
Artık takip eden işlemler bu dizin içinde yapılacak. Hangi dizinde olduğumuzu raporlamak için
print (os.getcwd())
/tmp/filan1
Dosya kopyalamak için
shutil.copy("/vs/vs/dir1/dosya1.txt", "/vs/vs/dir2")
Tüm dizini alt dizinleri ile birlikte başka bir dizin altına kopyalamak
için, diyelim ki /tmp
altındaki aaa
dizinini /tmp/bbb
dizini altına
kopyalamak istiyoruz,
shutil.copytree("/tmp/aaa","/tmp/bbb/aaa")
Tüm dosya isminden (dizin artı dosya ismi) sadece dizin bölümünü çıkartmak için,
import os
file = "/vs/vs/dir1/dir2/file1.txt"
os.path.dirname(file)
Out[1]: '/vs/vs/dir1/dir2'
Eğer sadece dosya ismini çekip çıkartmak istersek,
os.path.basename(file)
Out[1]: 'file1.txt'
Dizini altındaki tüm dosyalarla beraber silmek
import shutil
shutil.rmtree("/tmp/filan1")
Bir dizin altındaki dosyaları, dizinleri listlemek
os.listdir('/usr/dir1/dir2")
Üstteki çağrıdaki listede hem dosya hem dizin olacak, hangisi olduğunu
anlamak için os.path.isdir
ve os.path.isfile
kullanılabilir.
Bir dizin altındaki dosyaları, dizinleri belli bir kalıba uyacak şekilde listelemek.
import glob
glob.glob("/usr/*")
Out[1]:
['/usr/local',
'/usr/games',
'/usr/lib',
'/usr/share',
'/usr/src',
'/usr/libexec',
'/usr/include',
'/usr/sbin',
'/usr/bin']
glob.glob("/usr/*bin*")
Out[1]: ['/usr/sbin', '/usr/bin']
Eğer daha alt seviye dizinleri göstermek istersek, mesela iki seviye
aşağısı için, /*/*
diyebilirdik.
Fakat üstteki ifade özyineli bir şekilde en üst seviye dizinden tüm altdızinleri göstermez. Bunun için bir kod yazdık,
def ls(d,ignore_list=[]):
print ('ls ignore lst', ignore_list)
dirs = []; files = []
for root, directories, filenames in os.walk(d):
for directory in directories:
path = os.path.join(root, directory)
do_add = True
for ignore in ignore_list:
if ignore in path:
print ('ignoring', path); do_add = False
if do_add: dirs.append(path)
for filename in filenames:
path = os.path.join(root,filename)
do_add = True
for ignore in ignore_list:
if ignore in path: do_add = False
if do_add: files.append((path, os.path.getsize(path)))
return dirs, files
os.mkdir("/tmp/filan1")
os.mkdir("/tmp/filan1/filan12")
os.mkdir("/tmp/filan1/filan13")
os.mkdir("/tmp/filan1/filan12/filan121")
print (ls("/tmp/filan1"))
ls ignore lst []
(['/tmp/filan1/filan12', '/tmp/filan1/filan13', '/tmp/filan1/filan12/filan121'], [])
Yukarı