10. Standart Kütüphanenin Özeti¶
10.1. İşletim Sistemi Arayüzü¶
os
modülü, işletim sistemiyle etkileşim kurmak için düzinelerce fonksiyon sağlar:
>>> import os
>>> os.getcwd() # Return the current working directory
'C:\\Python314'
>>> os.chdir('/server/accesslogs') # Change current working directory
>>> os.system('mkdir today') # Run the command mkdir in the system shell
0
from os import *
yerine import os
stilini kullandığınızdan emin olun. Yanlış kullanım olan ilk stili tercih etmek, os.open()
‘ın çok daha farklı çalışan gömülü open()
fonksiyonunu gölgelemesine neden olur.
Gömülü dir()
ve help()
fonksiyonları os
gibi büyük modüllerle çalışma konusunda interaktif yardımcılar olarak kullanışlıdır:
>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>
Günlük dosya ve dizin yönetimi görevleri için shutil
modülü kullanımı daha kolay olan daha yüksek düzeyli (higher level) bir arayüz sağlar:
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
'archive.db'
>>> shutil.move('/build/executables', 'installdir')
'installdir'
10.2. Dosya Joker Karakterleri¶
glob
modülü , klasör joker karakter aramalarından dosya listeleri oluşturabilmek için bir fonsiyon sağlar:
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
10.3. Komut Satırı Argümanları¶
Common utility scripts often need to process command line arguments. These
arguments are stored in the sys
module’s argv attribute as a list. For
instance, let’s take the following demo.py
file:
# File demo.py
import sys
print(sys.argv)
Here is the output from running python demo.py one two three
at the command
line:
['demo.py', 'one', 'two', 'three']
argparse
modülü, komut satırı argümanlarını işlemek için daha sofistike bir yöntem sağlar. Aşağıdaki program, bir veya birden fazla dosya adını ve isteğe bağlı görüntülenecek satır sayısını ayıklar:
import argparse
parser = argparse.ArgumentParser(
prog='top',
description='Show top lines from each file')
parser.add_argument('filenames', nargs='+')
parser.add_argument('-l', '--lines', type=int, default=10)
args = parser.parse_args()
print(args)
Komut satırında python top.py --lines=5 alpha.txt beta.txt
çalıştırıldığı zaman program, args.lines
ögesini 5
ve args.filenames
ögesini ['alpha.txt', 'beta.txt']
olarak ayarlar.
10.4. Hata Çıktısının Yeniden Yönlendirilmesi ve Programın Sonlandırılması¶
sys
modülü ayrıca stdin, stdout ve stderr özelliklerine sahiptir. İkincisi, stdout yeniden yönlendirilmiş olsa bile bunları görünür hale getirmek için uyarılar ve hata iletileri yayımlamak için yararlıdır:
>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one
Bir programı sonlandırmak için, en kısa yol olan sys.exit()
komutunu kullanın.
10.5. String Örüntü Eşlemesi¶
re
modülü, gelişmiş string işleme için kurallı ifade araçları sağlar. Karmaşık eşleme ve manipülasyon için, kurallı ifadeler kısa ve optimize edilmiş çözümler sunar:
>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
Basit işlemlerde “string” metodu önerilir çünkü okuması ve hata ayıklaması daha kolaydır:
>>> 'tea for too'.replace('too', 'two')
'tea for two'
10.6. Matematik¶
The math
module gives access to the underlying C library functions for
floating-point math:
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
random
modülü rastgele seçimler yapmak için araçlar sağlar:
>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10) # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random() # random float from the interval [0.0, 1.0)
0.17970987693706186
>>> random.randrange(6) # random integer chosen from range(6)
4
statistics
modülü sayı içeren veriler için temel istatistiksel özellikleri hesaplar (ortalama, ortanca, fark, vb.):
>>> import statistics
>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
>>> statistics.mean(data)
1.6071428571428572
>>> statistics.median(data)
1.25
>>> statistics.variance(data)
1.3720238095238095
SciPy projesi <https://scipy.org> sayısal hesaplamalar için daha fazla modül içerir.
10.7. İnternet Erişimi¶
İnternete bağlanmak ve internet protokollerini işlemek için bazı modüller var. Bunlardan en basit ikisi; urllib.request
URL’lerden veri çekmek, ve smtplib
ise mail göndermek için:
>>> from urllib.request import urlopen
>>> with urlopen('http://worldtimeapi.org/api/timezone/etc/UTC.txt') as response:
... for line in response:
... line = line.decode() # Convert bytes to a str
... if line.startswith('datetime'):
... print(line.rstrip()) # Remove trailing newline
...
datetime: 2022-01-01T01:36:47.689215+00:00
>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()
(İkinci örnek için bir mail sunucusunun localhost’ta çalışması gerektiğini unutmayın.)
10.8. Tarihler ve Saatler¶
datetime
modülü, tarihleri ve saatleri hem basit hem de karmaşık şekillerde işlemek için sınıflar sağlar. Tarih ve saat aritmetiği desteklenirken, uygulamanın odak noktası çıktı biçimlendirmesi ve düzenlemesi için verimli üye ayıklamadır. Modül ayrıca saat dilimi farkında olan nesneleri de destekler.
>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368
10.9. Veri Sıkıştırma¶
Genel veri arşivleme ve sıkıştırma formatları şu modüller tarafından desteklenir: zlib
, gzip
, bz2
, lzma
, zipfile
ve tarfile
.
>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979
10.10. Performans Ölçümü¶
Bazı Python kullanıcıları, aynı soruna farklı yaklaşımların göreli performansını bilmek konusunda derin bir ilgi geliştirir. Python, bu soruları hemen yanıtlayan bir ölçüm aracı sağlar.
Örneğin, argümanları değiştirmek için geleneksel yaklaşım yerine dizi paketleme ve açma özelliğini kullanmak cazip olabilir. timeit
modülü hızla sade bir performans avantajı gösterir:
>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791
timeit
‘in ince ayrıntı düzeyinin aksine, profile
ve pstats
modülleri, daha büyük kod bloklarında zaman açısından kritik bölümleri tanımlamak için araçlar sağlar.
10.11. Kalite Kontrolü¶
Yüksek kalitede yazılımlar geliştirmek için her fonksiyon için testler yazılmalıdır ve bu testler geliştirirken sık sık çalıştırmalıdır.
doctest
modülü, bir modülü taramak ve bir programın docstrings’ine gömülü testleri doğrulamak için bir araç sağlar. Test yapısı, sonuçlarıyla birlikte tipik bir çağrıyı docstring’e kesip yapıştırma kadar basittir. Bu, kullanıcıya bir örnek sunarak dokümantasyonu geliştirir ve doctest modülünün kodun dokümantasyona göre doğru olduğundan emin olmasını sağlar:
def average(values):
"""Computes the arithmetic mean of a list of numbers.
>>> print(average([20, 30, 70]))
40.0
"""
return sum(values) / len(values)
import doctest
doctest.testmod() # automatically validate the embedded tests
unittest
modülü, doctest
modülü gibi çaba istemeyen bir modül değildir ama daha geniş kapsamlı test setlerinin ayrı dosyalarda sağlanmasına imkân verir:
import unittest
class TestStatisticalFunctions(unittest.TestCase):
def test_average(self):
self.assertEqual(average([20, 30, 70]), 40.0)
self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
with self.assertRaises(ZeroDivisionError):
average([])
with self.assertRaises(TypeError):
average(20, 30, 70)
unittest.main() # Calling from the command line invokes all tests
10.12. Bataryalar Dahildir¶
Python’un “bataryalar dahil” felsefesi vardır. Bu , büyük paketlerin en iyi şekilde sofistike ve sağlam kapabiliteleriyle görülür. Mesela:
xmlrpc.client
vexmlrpc.server
modülleri, uzak işlem grubu çağrılarını uygulamayı neredeyse önemsiz bir görev haline getirir. Modül adlarına rağmen, XML’nin doğrudan bilgisine veya işlenmesine gerek yoktur.email
paketi e-mail mesajlarını işlemek için bir kütüphanedir.MIME ve diğer RFC 2822-tabanlı mesajların dokümanlarını içerir. Mesaj gönderip alansmtplib
vepoplib
‘in aksine, e-mail paketinin derleme işlemini, kompleks mesaj yapılarının (ekler dahil) decode edilebilmesini sağlayan, internet encode işlemini ve header protokollerini uygulamak için geniş kapsamlı bir toolkit’e sahiptir.json
paketi, bu popüler veri değişim biçimini ayrıştırmak için sağlam destek sağlar.csv
modülü, genellikle veritabanları ve elektronik tablolar tarafından desteklenen Virgülle-Ayrılmış Değer biçimindeki dosyaların doğrudan okunmasını ve yazılmasını destekler. XML işlemexml.etree.ElementTree
,xml.dom
vexml.sax
paketleri tarafından desteklenir. Birlikte, bu modüller ve paketler Python uygulamaları ve diğer araçlar arasındaki veri değişimini büyük ölçüde basitleştirir.sqlite3
modülü , SQLite veritabanı kütüphanesi için bir wrapper’dır. Biraz standart dışı SQL syntax’ları kullanılarak güncellenebilen ve erişilebilen kalıcı bir veritabanı sağlanabilir.Uluslararasılaştırma
gettext
,locale
vecodecs
paketi dahil olmak üzere bir dizi modül tarafından desteklenir.