Son değiştirilme tarihi:15.05.2021

ÖNSÖZ

NOT:Dokümanda zaman zaman güncellemeler olacağı için arada bir güncel versiyon kontrolü yapmanızı tavsiye ederim.


"nbviewer" üzerinden görüntülüyorsanız, dosyayı kaydetmek için sayfanın sağ üst köşesindeki download butonuna tıklayın, açılan sayfada herhangi bir yere sağ tıklayın ve farklı kaydet diyerek dosyayı istediğiniz klasöre kaydedin. Dosyayı açabilmek için Jupyter'in kurulması gerekmekte olup, yeni başlayan biriyseniz aşağıda kurulumla ilgili detayları inceleyin.


Python'a ilk kez başlıyorsanız önce "Anaconda" kurulumu yapmanız gerekmektedir. Bu işlemi şu sayfadan öğrenebilir veya hemen alttaki videodan izleyebilirsiniz.

Anaconda ile birlikte Python environment'ına ek olarak Jupyter notebook uygulaması ve Spyder gibi IDE'ler de kurulacaktır. Ayrıca birçok önemli kütüphane(numpy, pandas, sklearn gibi) kurulmuş olacak. Ben de bu dokümanı Jupyter üzerinde hazırladım. O yüzden Jupyter ağırlıklı gideceğiz. Spyder'ı, kurcalayarak ve Youtube'da birkaç video izleyerek kendiniz de öğrenebilirsiniz.

Bu notebookta detaylı Jupyter kullanımı olmayacak. Her detayı vermekten ziyade bir başucu rehberi hazırlamayı amaçladım. Yani tam bir eğitim dokümanından ziyade büyük bir cheatsheet(hızlı başvuru kaynağı) tadında bir doküman bulacaksınız. Dokümanın en altında süper konsantre bir cheatsheet daha bulacaksınız.

Gereksiz açıklamalarla dokümanı şişirmek istemedim. Çoğu durumda kodları çalıştırdığınızda neyin ne olduğunu anlayabileceksiniz. Anlaşılması zor durumlar için ilave açıklamalar olacaktır.

Bununla birlikte bir nebze de olsa programcılık dünyasına aşina olmanızda fayda var. Eğer tamamen sıfır noktasındaysanız bu doküman size biraz ağır gelebilir. Önce başka bir kaynaktan temelleri(değişken, fonksiyon, algoritma, nesne v.s) öğrenin, bu dokümanı ise cheatsheet olarak kullanın.

DİKKAT: En altta Verimlilik bölümünde gösterdiğim "code(input) hücrelerini saklama yöntemi"nde kullandığım kod, sayfadaki tüm input hücrelerinin gizlenmesine neden olmaktadır. Bunun için aşağıdaki butona tıklamanız gerekebilir. (İçinde yazan kod python kodu olmayıp javascripttir, şimdilik buna takılmayın)

In [1]:
from IPython.display import HTML

HTML('''<script>
code_show=true; 
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
} 
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Kodları Göster/Gizle"></form>''')
Out[1]:
In [1]:
from IPython.display import YouTubeVideo
YouTubeVideo('JEv5oigBUL0')
Out[1]:

Jupyter

Rehber

Jupyter kullanırken neleri bilmenizde fayda var?

  • Kısayol tuşları(Jupyter'de H tuşuna basınca çıkar)-->bunları mutlaka kullanın, büyük hız kazandırır. Herşeyi yukarıdaki menülerden yapmaya kalkarsanız yavaş ilerlersiniz.
  • magic functions(Googlelayın)-->Bir süre sonra, şimdi değil
  • smart suggestions(tab, tab+tab)-->sınıflar ve metodlar hakkında bilgi alırsınız, kod pratiğine başlayınca deneyin. Aşağıda print için örnek ekran görüntüleri var.
  • nbextensions ve jupyter_helpers-->sol paneldeki içindekiler ve indeksleme dahil birçok güzellik
  • help, dir ile yardım alınır-->deneyin(aşağıda örnek var)
  • type fonksiyonu ile sık sık bir değişkenin tipini öğrenmeniz gerekecek -->deneyin
  • naming convention(pep 0008)-->Kritik değil ama bence önemli, googlelayın
  • jupyteri ektin kullanma rehberleri(medium v.s)-->Hemen değil ama bir süre sonra googlelayın
  • https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/
In [3]:
a=1
liste=[]
print(type(a),type(liste))
<class 'int'> <class 'list'>
In [4]:
help(print) #print fonksiyonu hakkında yardım
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

In [5]:
[x for x in dir(dict) if not "__" in x] #dictionary nesnesinin property ve metodları. tek başına dir(dict) yapsaydım 
#çok uzun bi liste çıkardı. aşağıda göreceğimiz comprehension yönteminden faydalanarak listeyi daralttım
Out[5]:
['clear',
 'copy',
 'fromkeys',
 'get',
 'items',
 'keys',
 'pop',
 'popitem',
 'setdefault',
 'update',
 'values']

image.png

image.png

Anacondayı kurduktan sonra yukarda bahsettiğim nbextensionsı kurar ve bu notebooku kendi pcnize indirip jupyter içinden açarsanız aşağıdaki gibi İçindekiler tablolu ve indeksli şekilde görebilirsiniz. Kurulumun nasıl yapılacağını https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html sayfasından görebilirsiniz. Onun öncesinde biraz aşağıdaki Modül, Package, Class bölümüne bakıp kavramlar hakkında kısa bir bilgi edinebilirsiniz. (Bu işlem size karışık gelirse bu aşamayı pas geçebilir ve biraz daha deneyim kazandıktan sonra tekrar denersiniz. Ancak benim tavsiyem, bikaç kez deneyin ve kurmaya çalışın, inanın çok faydasını göreceksiniz)

image.png

NOT: Yukarıdaki ekran görüntüsü gibi resimleri kolayca notebookunuz içine ekleyebiliyorsunuz. Sadece bir Markdown tipli hücre açıp içine girin ve clipboarda aldığınız resmi yapıştırın.

Çoklu output

Normalde bir hücrede "print" ifadesi kullanmazsak sadece son değişken çıktı olarak gösterilir. Ancak aşağıdaki kod bloğu ile tüm değişkenler çıktı olarak elde edilebilmektedir.

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

Örneğin bu interactive kodları girilmeden aşağıdaki kod çalışıtırılırsa sadece 2 sonucunu alırken

a=1
b=2
a
b

Yukarıdaki iki satırlık kod girilirse hem 1 hem 2 sonucu görünür.

In [15]:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
In [5]:
a=1
b=2
a
b
Out[5]:
1
Out[5]:
2

Çeşitli operatörler

In [6]:
#! işareti ile işletim sistemi komutları kullanılabilir
import os #os modülü ayrıca anlatılacak, aşağıdaki kod ile geçerli klasörü değiştiriyoruz
os.chdir(r"E:\OneDrive\Uygulama Geliştirme") 
# sanki meşhur siyah cmd ekranımızda "dir" demişim gibi
!dir
 Volume in drive E is MYHDD
 Volume Serial Number is 9E4D-C087

 Directory of E:\OneDrive\Uygulama GeliŸtirme

09.01.2020  00:23    <DIR>          .
09.01.2020  00:23    <DIR>          ..
09.09.2019  23:42    <DIR>          java
09.01.2020  23:52    <DIR>          PDF dok�mantasyon
15.06.2019  16:35    <DIR>          Scratch
12.12.2019  15:32    <DIR>          silinecek
18.08.2019  13:38    <DIR>          Visual Studio
19.08.2019  23:18    <DIR>          web js asp
08.01.2020  00:52    <DIR>          web sitelerim
               0 File(s)              0 bytes
               9 Dir(s)  510.644.449.280 bytes free
In [7]:
# "#" işareti ile yorum yazarız
In [8]:
%%HTML
Farklı dil seçeneklerin <em>kullanabiliyoruz</em>. Burada HTML kullanmış olduk.
Farklı dil seçeneklerin kullanabiliyoruz. Burada HTML kullanmış olduk.

Matematiksel ifadeler

In [9]:
%%latex #Latex ile matematiksel formüller girebiliyoruz
$$E=mc^2$$
$sin(x)/x$
$$E=mc^2$$ $sin(x)/x$

Hizalama
Yukarıdaki code hücresiyidi, bu ise markdown hücresidir
$$ ile yazım formülü ortalar<br> \$ ile yazımda ise sola dayalı ve küçük

$$\Pi p(n)$$

$\frac \pi 2$

Diğer ifadeler

\frac ifadesi ile kesirler
_ karakteri ile indis(subscript)
\pi, \sum, \bar ve \hat gibi özel ifadeler

$$\sum p(n)$$$$y_i, \bar{y}_i, \hat{y}_i$$$$TSS=\sum_{i=1}^n(y_i-\bar{y}_i)^2$$$$P(c|x)=\frac {P(x|c).P(c)}{P(x)}$$
In [10]:
#bu modül ile de daha gösterişli matematiksel formüller girebiliyoruz
from IPython.display import Math
Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx')
Out[10]:
$\displaystyle F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx$
In [11]:
#dahası da var, müzik ve video da ekleyebiliyoruz
from IPython.display import Audio
Audio(url="http://www.nch.com.au/acm/8k16bitpcm.wav")
Out[11]:
In [1]:
from IPython.display import YouTubeVideo
YouTubeVideo('NGrJjLCpKSA') # reklamımı da yapayım :)
Out[1]:
In [13]:
#print edilecek liste çok büyükse ekranda çok yer kaplamaması adına bu aşağıdaki modül oldukça kullanışlıdır. 
#bunun önemini henüz anlamayabilirsiniz, bi köşede dursun
#https://towardsdatascience.com/productivity-tips-for-jupyter-python-a3614d70c770
from jupyter_helpers.following_tail import FollowingTail

max5=FollowingTail(5)
max5.activate()
liste=range(100)

for i in liste:
    max5(i)

Genel syntax

In [14]:
sayi=1 #değişkenler doğrudan atanır. türkçe karakter kullanmamaya çalışın

Değişkenlerde çoklu satır kullanımı

In [15]:
linecont="merhaba burada line "+ \
" contination uygulandı" + \
"ama sonuç yine de bitişik yazar"
print(linecont)
merhaba burada line  contination uygulandıama sonuç yine de bitişik yazar
In [16]:
satırayaygın="""
bu satırlar
ise satırlara
yayılmış durum
"""
print(satırayaygın)
bu satırlar
ise satırlara
yayılmış durum

In [17]:
#veri yapıları için ise yukarıdaki iki yönteme de gerek olmadan kaydırabiliriz
gunler=["Pzt","salı",
       "çar","perş"]
print(gunler)
['Pzt', 'salı', 'çar', 'perş']

Başlıklar

Başlıklar normalde #, ##, ###,... ifadeleriyle HTML'deki h1,h2,h3...'e denk gelecek şekilde oluşturulur. Bu dokümandaki tüm başlıklar da böyle oluşuturuldu. Dokümanı kendi jupyterinizde açtıysanız, herhangi bir başlık hücresine gelip Enter'a basın. Enter ile hücreyi edit moduna sokmuş oluruz. Böylece başlığın nasıl yazıldığını da görmüş olursunuz. Mesela bu paragrafın başlığı aşağıdaki gibidir

image.png

Bu tür başlıklar, eğer nbextension kurduysanız 1.1.2 gibi indeksli şekilde görünür. Eğerki bu dokümana bir notebook gösterici(github veya nbviewer gibi) üzerinden bakıyorsanız 1.1.2 şeklindeki gösterimi görmüyorsunuzdur. Detaylar için en baştaki Rehber kısmına bakınız

Bu ise html(strong tag'i) kullanılarak oluşturulmuş kalın bi başlık. Sol paneldeki "İçindekiler" paneline girmesini istemediğiniz başlıkları bu şekilde oluşturabilirsiniz.

Diğer başlık türleri

üç yıldız ile bold&italik
iki yıldız ile bold yapma
tek yıldız ile italik yapma
sağa dönük tek tırnak ile vurgulu yapma. Bu karakteri Alt+96 ile yazabilirsiniz.

Paragraf, satır geçme ve html kullanımı

Üst paragraf

İki kere entera basarak paragraf açabilirsiniz(bu satırda olduğu gibi. hücreye çift tıklayın ve görün)
veya bi satırın sonunda "br" tagi ekleyerek bir alt satıra geçebilrsiniz. (bu satırda olduğu gibi. hücreye çift tıklayın ve görün)

NOT:Bu kolaylıkları öğrenene/keşfedene kadar ben bu paragraf ve bi alt satır işlerini Markdown değil de Raw NB Convert hücre tipi ile yapıyordum. Bunu öğrendikten sonra Raw NB Covnert tipli hücrelere pek ihtiyaç duymadım.

Naming convention

"Pep 008 python" araması yapın ve tüm detayları görün. aşağıda sadece "_" kullanımını koydum

In [18]:
_privatevariable=3
#_privatemethod()
list_=[1,2,3] #rezerv keylerin sonuna _ gelir. list diye bir değişken adı kullanamayız, list_ olabilir
dict_={"ad":"ali","soyad":"yılmaz"}
for x,_ in dict_.items(): #ilgilenmediğimiz değerler için "_"
    print(x)
ad
soyad

Bununu dışında sklearn(Machine Learning kütüphanesi)de bazı propertylerin _ ile bittiğini görürsünüz. bunların anlamı da, ilgili propertyle ulaşmak için öncelikle modelin eğitilmesi(fit edilmesi) gerekmekte, eğitilmemiş modelde bu bilgiye ulaşamak anlamsızdır demek.

Modül, Package, Class

Bu 3 kavram hiyerarşik olarak şöyle sıralanır. Package>module>class.

Yani her sınıf bir modül içindedir. modüller py uzantılı dosylardır. birkaç modül biraraya gelerek bir paket oluşturur. Ör: DataScience çalışmalarında pandas paketi kullanılır, bu anaconda sürümü ile birlikte gelir.

Bir de kütüphane kavramı var. Python'daki kütüphane(library) kavramı C/C# gibi dillerdeki dll dosyalarından farklı bir anlama sahiptir. Burada daha çok belirli modüllerin veya package'ların biraraya gelerek kavramsal bir topluluk oluşturumasından bahsediyoruz. Ör:Makine öğrenme kütüphanesi gibi. Bu arada ille bir fiziksel karşılık aranacaksa package'lar gibi düşünülebilirler.

DİKKAT:Kafa karışıtırıcı bir paragraf, isterseniz şimdilik atlayın ma sonra mutlaka glin ve özellikle alttaki linki okuyun

Yeni bir paket kurmak istediğinizde;

conda install paketadı demeniz yeterlidir. Eğer bu yeterli gelmezse;
pip install paketadı diyebilirsiniz. Bunu bazen başında ! olacak şekilde yapmak gerekebiliyor. ! varsa aslında komut satırı komutu gibi çalışmış oluyor, ! yoksa da % işareti varmış gibi çalışıyor. % işareti olması automagic olarak çalışması anlmamına gleiyor. automagic konusunu araştırrsanız anlarsınız.

Ama şimdi bu yukarıdaki iki yöntemi de unutun ve aşağıdaki şu linke bakın. kurulumları nasıl yapmanız gerektiğini göreceksiniz.

Daha detaylı bilgiyi aşağıdaki linkten edinebilirsiniz:
https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/

In [1]:
#örnek olarak şimdi DeepLearning paketi olan kerası kuruyorum
#conda install keras
In [5]:
#mevcut packageların listesi
!pip list
Package                            Version            
---------------------------------- -------------------
-umpy                              1.16.2             
absl-py                            0.9.0              
alabaster                          0.7.12             
anaconda-client                    1.7.2              
anaconda-navigator                 1.9.7              
anaconda-project                   0.8.3              
argh                               0.26.2             
asn1crypto                         1.3.0              
astor                              0.8.0              
astroid                            2.3.3              
astropy                            4.0                
atomicwrites                       1.3.0              
attrs                              19.3.0             
autopep8                           1.4.4              
Babel                              2.8.0              
backcall                           0.1.0              
backports.os                       0.1.1              
backports.shutil-get-terminal-size 1.0.0              
bcrypt                             3.1.7              
beautifulsoup4                     4.8.2              
bitarray                           1.2.1              
bkcharts                           0.2                
bleach                             3.1.0              
blinker                            1.4                
bokeh                              1.4.0              
boto                               2.49.0             
Bottleneck                         1.3.2              
cachetools                         3.1.1              
certifi                            2019.11.28         
cffi                               1.14.0             
chardet                            3.0.4              
Click                              7.0                
cloudpickle                        1.3.0              
clyent                             1.2.2              
colorama                           0.4.3              
comtypes                           1.1.7              
conda                              4.8.2              
conda-build                        3.17.8             
conda-package-handling             1.6.0              
conda-verify                       3.1.1              
confuse                            1.0.0              
contextlib2                        0.6.0.post1        
cryptography                       2.8                
cycler                             0.10.0             
Cython                             0.29.15            
cytoolz                            0.10.1             
dask                               2.11.0             
decorator                          4.4.1              
defusedxml                         0.6.0              
diff-match-patch                   20181111           
distributed                        2.11.0             
docutils                           0.16               
entrypoints                        0.3                
et-xmlfile                         1.0.1              
fastcache                          1.1.0              
filelock                           3.0.12             
flake8                             3.7.9              
Flask                              1.1.1              
fsspec                             0.6.2              
future                             0.18.2             
gast                               0.2.2              
gevent                             1.4.0              
glob2                              0.7                
google-auth                        1.11.2             
google-auth-oauthlib               0.4.1              
google-pasta                       0.1.8              
graphviz                           0.10.1             
greenlet                           0.4.15             
grpcio                             1.27.2             
h5py                               2.10.0             
HeapDict                           1.0.1              
html5lib                           1.0.1              
htmlmin                            0.1.12             
hypothesis                         5.5.4              
idna                               2.8                
imageio                            2.6.1              
imagesize                          1.2.0              
importlib-metadata                 1.5.0              
intervaltree                       3.0.2              
ipykernel                          5.1.4              
ipython                            7.12.0             
ipython-genutils                   0.2.0              
ipywidgets                         7.5.1              
isort                              4.3.21             
itsdangerous                       1.1.0              
jdcal                              1.4.1              
jedi                               0.14.1             
Jinja2                             2.11.1             
joblib                             0.14.1             
json5                              0.9.1              
jsonschema                         3.2.0              
jupyter                            1.0.0              
jupyter-client                     5.3.4              
jupyter-console                    6.1.0              
jupyter-contrib-core               0.3.3              
jupyter-contrib-nbextensions       0.5.1              
jupyter-core                       4.6.1              
jupyter-helpers                    0.1.1              
jupyter-highlight-selected-word    0.2.0              
jupyter-latex-envs                 1.4.4              
jupyter-nbextensions-configurator  0.4.1              
jupyterlab                         1.2.6              
jupyterlab-server                  1.0.6              
Keras                              2.3.0              
Keras-Applications                 1.0.8              
Keras-Preprocessing                1.1.0              
keyring                            21.1.0             
kiwisolver                         1.1.0              
lazy-object-proxy                  1.4.3              
libarchive-c                       2.8                
llvmlite                           0.31.0             
locket                             0.2.0              
lxml                               4.5.0              
Markdown                           3.1.1              
MarkupSafe                         1.1.1              
matplotlib                         3.1.3              
mccabe                             0.6.1              
menuinst                           1.4.16             
missingno                          0.4.2              
mistune                            0.8.4              
mkl-fft                            1.0.15             
mkl-random                         1.1.0              
mkl-service                        2.3.0              
mock                               4.0.1              
more-itertools                     8.2.0              
mpmath                             1.1.0              
msgpack                            0.6.1              
multipledispatch                   0.6.0              
navigator-updater                  0.2.1              
nbconvert                          5.6.1              
nbformat                           5.0.4              
networkx                           2.4                
nltk                               3.4.5              
nose                               1.3.7              
notebook                           6.0.3              
numba                              0.48.0             
numexpr                            2.7.1              
numpy                              1.18.1             
numpydoc                           0.9.2              
oauthlib                           3.1.0              
olefile                            0.46               
openpyxl                           3.0.3              
opt-einsum                         3.1.0              
packaging                          20.1               
pandas                             1.0.1              
pandas-profiling                   2.3.0              
pandocfilters                      1.4.2              
paramiko                           2.7.1              
parso                              0.5.2              
partd                              1.1.0              
path                               13.1.0             
pathlib2                           2.3.5              
pathtools                          0.1.2              
patsy                              0.5.1              
pep8                               1.7.1              
pexpect                            4.8.0              
phik                               0.9.8              
pickleshare                        0.7.5              
Pillow                             7.0.0              
pip                                20.0.2             
pkginfo                            1.5.0.1            
plotly                             4.2.1              
pluggy                             0.13.1             
ply                                3.11               
prometheus-client                  0.7.1              
prompt-toolkit                     3.0.3              
protobuf                           3.11.4             
psutil                             5.6.7              
ptvsd                              4.3.2              
py                                 1.8.1              
pyasn1                             0.4.8              
pyasn1-modules                     0.2.7              
pycodestyle                        2.5.0              
pycosat                            0.6.3              
pycparser                          2.19               
pycrypto                           2.6.1              
pycurl                             7.43.0.5           
pydocstyle                         4.0.1              
pydotplus                          2.0.2              
pyflakes                           2.1.1              
Pygments                           2.5.2              
PyJWT                              1.7.1              
pylint                             2.4.4              
PyNaCl                             1.3.0              
pyodbc                             4.0.0-unsupported  
pyOpenSSL                          19.1.0             
pyparsing                          2.4.6              
pyreadline                         2.1                
pyrsistent                         0.15.7             
PySocks                            1.7.1              
pytest                             5.3.5              
pytest-arraydiff                   0.3                
pytest-astropy                     0.8.0              
pytest-astropy-header              0.1.2              
pytest-doctestplus                 0.5.0              
pytest-openfiles                   0.4.0              
pytest-pylint                      0.14.1             
pytest-remotedata                  0.3.2              
python-dateutil                    2.8.1              
python-jsonrpc-server              0.3.4              
python-language-server             0.31.7             
pytz                               2019.3             
PyWavelets                         1.1.1              
pywin32                            227                
pywin32-ctypes                     0.2.0              
pywinpty                           0.5.7              
PyYAML                             5.3                
pyzmq                              18.1.1             
QDarkStyle                         2.8                
QtAwesome                          0.6.1              
qtconsole                          4.6.0              
QtPy                               1.9.0              
requests                           2.22.0             
requests-oauthlib                  1.3.0              
retrying                           1.3.3              
rope                               0.16.0             
rsa                                4.0                
Rtree                              0.9.3              
ruamel-yaml                        0.15.87            
scikit-image                       0.16.2             
scikit-learn                       0.22.1             
scipy                              1.4.1              
seaborn                            0.10.0             
Send2Trash                         1.5.0              
setuptools                         45.2.0.post20200210
simplegeneric                      0.8.1              
singledispatch                     3.4.0.3            
six                                1.14.0             
snowballstemmer                    2.0.0              
sortedcollections                  1.1.2              
sortedcontainers                   2.1.0              
soupsieve                          1.9.5              
Sphinx                             2.4.0              
sphinxcontrib-applehelp            1.0.1              
sphinxcontrib-devhelp              1.0.1              
sphinxcontrib-htmlhelp             1.0.2              
sphinxcontrib-jsmath               1.0.1              
sphinxcontrib-qthelp               1.0.2              
sphinxcontrib-serializinghtml      1.1.3              
sphinxcontrib-websupport           1.2.0              
spotipy                            2.4.4              
spyder                             4.0.1              
spyder-kernels                     1.8.1              
SQLAlchemy                         1.3.13             
statsmodels                        0.9.0              
sympy                              1.5.1              
tables                             3.6.1              
tblib                              1.6.0              
tensorboard                        2.1.0              
tensorflow                         1.15.0             
tensorflow-estimator               1.15.1             
termcolor                          1.1.0              
terminado                          0.8.3              
testpath                           0.4.4              
toolz                              0.10.0             
tornado                            6.0.3              
tqdm                               4.42.1             
traitlets                          4.3.3              
typed-ast                          1.4.0              
ujson                              1.35               
unicodecsv                         0.14.1             
urllib3                            1.25.8             
watchdog                           0.10.2             
wcwidth                            0.1.8              
webencodings                       0.5.1              
Werkzeug                           0.16.1             
wheel                              0.34.2             
widgetsnbextension                 3.5.1              
win-inet-pton                      1.1.0              
win-unicode-console                0.5                
wincertstore                       0.2                
wordcloud                          1.5.0              
wrapt                              1.11.2             
xlrd                               1.2.0              
XlsxWriter                         1.2.7              
xlwings                            0.17.1             
xlwt                               1.3.0              
yapf                               0.28.0             
zict                               1.0.0              
zipp                               2.2.0              
In [ ]:
#bi kapet hakkında bilgi
!pip show numpy
In [5]:
# bir paketi sorgulama, var mı yok mu, hangi versiyonu kurulu v.s
!pip search matplotlib
django-matplotlib (0.1)             - Matplotlib field for Django
matplotlib-stream (1.0.0)           - GCPDS: matplotlib stream
hangar-matplotlib (0.0.3)           - Matplotlib plugin for hangar
matplotlib-helpers (0.1.post6)      - Helper functions, etc. for matplotlib
matplotlib-terminal (0.1a2)         - Render matplotlib plots in terminal.
matplotlib-colorbar (0.4.0)         - Artist for matplotlib to display a color bar
matplotlib-scalebar (0.6.2)         - Artist for matplotlib to display a scale bar
jirafs-matplotlib (1.0.3)           - Render matplotlib charts in your JIRA issues
matplotlib-pgfutils (1.3.1)         - Utilities for generating PGF figures from Matplotlib
matplotlib-subsets (1.0)            - Functions for plotting area-proportional hierarchical subset diagrams in matplotlib.
matplotlib-venn (0.11.5)            - Functions for plotting area-proportional two- and three-way Venn diagrams in matplotlib.
matplotlib (3.2.1)                  - Python plotting package
  INSTALLED: 3.2.1 (latest)
matplotlib-label-lines (0.3.8)      - Label lines in matplotlib.
matplotlib-backend-qtquick (0.0.6)  - A QtQuick backend for matplotlib
fc-simesh-matplotlib (0.0.3)        - Matplotlib add-on to the fc_simesh package
japanize-matplotlib (1.1.2)         - matplotlib&#12398;&#12501;&#12457;&#12531;&#12488;&#35373;&#23450;&#12434;&#33258;&#21205;&#12391;&#26085;&#26412;&#35486;&#21270;&#12377;&#12427;
eddington-matplotlib (0.0.4)        - A laboratory utility library for fitting and presenting data
timeseriesql-matplotlib (0.0.2)     - A plotting backend for the TimeSeriesQL library
matplotlib-hep (0.1.0)              - Module for making data analysis in High Energy Physics with Python more convenient
ing-theme-matplotlib (0.1.5)        - ING styles for common plotting libraries
matplotlib-venn-wordcloud (0.2.5)   - Create a Venn diagram with word clouds corresponding to each subset.
mplstereonet (0.5)                  - Stereonets for matplotlib
prettyfigure (0.1.1)                - Styles for matplotlib
PlotDraw (0.0.1)                    - interface of Matplotlib
pyplottr (0.1.0)                    - Matplotlib for humans
mpl-tools (0.1.10)                  - Tools for Matplotlib
mplutils (0.3.0)                    - Tools for matplotlib
imatplotlib (0.0.1)                 - innovata-matplotlib
mobobob (0.5.1)                     - An alias for matplotlib
mpltools (0.2.0)                    - Tools for Matplotlib
mplstyle (0.1.2)                    - A simple API for setting matplotlib styles in matplotlib.
matplotlibXtns (20.5)               - matplotlib extension functions.
kwplot (0.4.5)                      - A wrapper around matplotlib
plopy (1.5.5)                       - GUI for matplotlib graphing
celluloid (0.2.0)                   - Easy matplotlib animation.
contours (0.0.2)                    - Contour calculation with Matplotlib.
mpl-font (1.0.1)                    - Font selector for matplotlib
plotcsv (0.1.2)                     - Plot CSV with matplotlib
ipympl (0.5.6)                      - Matplotlib Jupyter Extension
mpl-toolkits.clifford (0.0.3)       - Matplotlib tools for clifford
pycbc-mpld3 (0.3.dev0)              - D3 Viewer for Matplotlib
matplotlylib (0.1.0)                - Matplotlib to Plotly Converter
ficus (0.5)                         - context managers for matplotlib
figurefirst (0.0.6)                 - Matplotlib plotting stuff
mplhep (0.1.21)                     - Matplotlib styles for HEP
mpld3 (0.3)                         - D3 Viewer for Matplotlib
animateimages (0.2.4)               - Animation of matplotlib images
oscplotlib (0.1.0)                  - OSC1337 wrapper for Matplotlib
matplotlibaux (20.2.23.0)           - matplotlib auxiliary stuff
mpl_style_gallery (0.1)             - Gallery for Matplotlib stylesheets
matplotvideo (0.0.2)                - Syncing matplotlib and video
mplsvds (0.1.7)                     - matplotlib styling for svds
chainplot (0.2.1)                   - A(nother) matplotlib wrapper
plotmark (1.0.0)                    - Plot markers for Matplotlib
dufte (0.2.5)                       - Clean matplotlib plots
mpl4qt (2.2.0)                      - Matplotlib widget for PyQt
mpt-multiplot (0.0.2)               - Convenient matplotlib subplot grids
psynlig (0.0.6.dev0)                - A package for creating plots with matplotlib.
wraplot (0.1.1)                     - A simple python wrapper of matplotlib
latex-plot-utils (1.0.0)            - Helpers for Matplotlib plots in LaTeX
mpl-tune (0.1)                      - A collection of matplotlib tuning scripts
GooseMPL (0.4.1)                    - Style and extension functions for matplotlib
panel-plots (0.1.0)                 - Organize matplotlib plots in panels
mpltern (0.3.0)                     - Ternary plots as projections of Matplotlib
mpls (0.2.0)                        - An open library of matplotlib styles
fishbowl (0.3.1)                    - Customizable matplotlib style extension
mpl-sns-viz (0.1.1)                 - Creates matplotlib and seaborn visuals
mpl-finance (0.10.1)                - Finance plots using matplotlib
hpcplot (0.1)                       - A matplotlib wrapper for HPC Plots
nc-time-axis (1.2.0)                - cftime support for matplotlib axis
figplotter (0.0.3)                  - A figure plotter using matplotlib
MatPlotTheme (0.1.2)                - MatPlotTheme is a theming library for MatPlotLib.
feynman (2.0.2)                     - Feynman diagrams with python-matplotlib.
plot_max (0.24)                     - high level to use matplotlib
vapeplot (0.0.8)                    - matplotlib extension for vaporwave aesthetics
grid-strategy (0.0.1)               - A package for organizing matplotlib plots.
quick-plot (0.0.2)                  - convenience wrapper around matplotlib
plotje (1.1)                        - Simple matplotlib styling function.
ezplot (0.1.0a4)                    - Remote Procedure interface to Matplotlib
plotformatter (0.1.0)               - Creates matplotlib and seaborn visuals
hipsterplot (0.1)                   - because matplotlib is too mainstream
atlas-mpl-style (0.11.0)            - ATLAS style for Matplotlib 3.0+
blume (0.0.1)                       - Better looking tables for matplotlib
umPlot (0.0.1)                      - with matplotlib and basemap plot data
python-controlchart (0.2.0)         - Creation of control charts with matplotlib
tgext.matplotrender (0.0.1)         - Renderer to expose matplotlib figures
svgpath2mpl (0.2.1)                 - SVG path parser for matplotlib
In [3]:
#eğer, daha üst sürümü varsa ona upgrade etmek için
!pip install numpy --upgrade 
#veya conda update numpy
Requirement already up-to-date: numpy in c:\users\volka\anaconda3\lib\site-packages (1.18.1)
In [23]:
#yeni sürümle çalışıtırma sıkıntısı yaşarsanız eski sürüme dönebilirsiniz
#!pip install --upgrade paketadı=versiyonno #(Ör:pip install --upgrade werkzeug==0.12.2)
In [24]:
#paketi komple kaldırmak için
#!pip uninstall paketadı
In [25]:
#python versiyonu öğrenmek
!python --version
Python 3.7.3
In [26]:
#python'ın versiyonunu yükseltmek
#!conda update python
In [27]:
#packageler hangi klasörlere kuruluyor
import sys
sys.path
Out[27]:
['C:\\Users\\volka\\Documents\\GitHub\\PythonRocks',
 'C:\\Users\\volka\\Anaconda3\\python37.zip',
 'C:\\Users\\volka\\Anaconda3\\DLLs',
 'C:\\Users\\volka\\Anaconda3\\lib',
 'C:\\Users\\volka\\Anaconda3',
 '',
 'C:\\Users\\volka\\AppData\\Roaming\\Python\\Python37\\site-packages',
 'C:\\Users\\volka\\Anaconda3\\lib\\site-packages',
 'C:\\Users\\volka\\Anaconda3\\lib\\site-packages\\win32',
 'C:\\Users\\volka\\Anaconda3\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\volka\\Anaconda3\\lib\\site-packages\\Pythonwin',
 'C:\\Users\\volka\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\volka\\.ipython']
In [28]:
import site
print(site.getsitepackages())
['C:\\Users\\volka\\Anaconda3', 'C:\\Users\\volka\\Anaconda3\\lib\\site-packages']

Özel kurulum şekillleri

In IPython (jupyter) 7.3 and later, there is a magic %pip and %conda command that will install into the current kernel (rather than into the instance of Python that launched the notebook).

%pip install geocoder

! pip install --user (The ! tells the notebook to execute the cell as a shell command.)

Modül ve sınıflar(ve hatta fonksiyonları) kodumuza dahil etme

  • Modül referansı: import x, kullanımı: x'i takipeden üye şeklinde. x.falanmetod, x.falanproperty, x.falanfalan
  • Modüldeki herşeyi dahil etme: from x import * , kullanımı: falanca(...)
  • Tek birşeyi dahil etme: from x import falanca. falanca doğrudan kullanılabilir, x.falanca demeye gerek yok(üsstekinden farkı daha az şey importladık)
In [29]:
from math import sqrt #math modülünden sqrt fonksiyonu
kök=sqrt(16)
kök
Out[29]:
4.0
In [30]:
from os import * # os modülündeki herşeyi
mkdir("test") #os dememize gerek yok. test diye bi klasör yarattık
removedirs("test") #hemen arkadan bu klasörü sildik
!dir
 Volume in drive E is MYHDD
 Volume Serial Number is 9E4D-C087

 Directory of E:\OneDrive\Uygulama GeliŸtirme

16.01.2020  20:42    <DIR>          .
16.01.2020  20:42    <DIR>          ..
09.09.2019  23:42    <DIR>          java
09.01.2020  23:52    <DIR>          PDF dok�mantasyon
15.06.2019  16:35    <DIR>          Scratch
12.12.2019  15:32    <DIR>          silinecek
18.08.2019  13:38    <DIR>          Visual Studio
19.08.2019  23:18    <DIR>          web js asp
08.01.2020  00:52    <DIR>          web sitelerim
               0 File(s)              0 bytes
               9 Dir(s)  510.644.449.280 bytes free

Kendi modüllerinizi import etme

Normal bir modül import eder gibi ederiz. Ancak bazen, kodlarımızda sık güncelleme yapmak durumunda kalabiliyoruz. o sırada da bu modülümü import ettiğimiz bir başka notebookta çalışırken güncel halini dikkate almasını isteriz. Bu işi, notebooku restart etmeden yapmanın bir yolu var:

In [1]:
%load_ext autoreload
%autoreload 2

Virtual Environment

In [20]:
#En güncel pip'i kuralım
!py -m pip install --upgrade pip
Requirement already up-to-date: pip in c:\users\volka\appdata\local\programs\python\python38-32\lib\site-packages (20.1.1)
In [21]:
#înstalling
!py -m pip install --user virtualenv
Collecting virtualenv
  Downloading virtualenv-20.0.27-py2.py3-none-any.whl (4.9 MB)
Collecting appdirs<2,>=1.4.3
  Downloading appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
Collecting distlib<1,>=0.3.1
  Downloading distlib-0.3.1-py2.py3-none-any.whl (335 kB)
Collecting filelock<4,>=3.0.0
  Downloading filelock-3.0.12-py3-none-any.whl (7.6 kB)
Requirement already satisfied: six<2,>=1.9.0 in c:\users\volka\appdata\roaming\python\python38\site-packages (from virtualenv) (1.14.0)
Installing collected packages: appdirs, distlib, filelock, virtualenv
Successfully installed appdirs-1.4.4 distlib-0.3.1 filelock-3.0.12 virtualenv-20.0.27
In [22]:
#yaratma
!py -m venv env #bulunduğumuz aktif klasör içinde yaratır
In [34]:
#aktivasyon
!.\env\Scripts\activate
In [46]:
#bakalım PATH'e eklenmiş mi
p=!PATH
str(p).split(";")
Out[46]:
["['PATH=C:\\\\Windows\\\\system32",
 'C:\\\\Windows',
 'C:\\\\Windows\\\\System32\\\\Wbem',
 'C:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\',
 'C:\\\\Windows\\\\System32\\\\OpenSSH\\\\',
 'C:\\\\Program Files\\\\dotnet\\\\',
 'C:\\\\Program Files\\\\Microsoft SQL Server\\\\130\\\\Tools\\\\Binn\\\\',
 'C:\\\\Program Files\\\\Microsoft SQL Server\\\\Client SDK\\\\ODBC\\\\170\\\\Tools\\\\Binn\\\\',
 'C:\\\\Program Files (x86)\\\\LINQPad5',
 'C:\\\\Program Files (x86)\\\\Yarn\\\\bin\\\\',
 'C:\\\\Program Files\\\\Git LFS',
 'C:\\\\Program Files\\\\Git\\\\cmd',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python38-32\\\\Scripts\\\\',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python38-32\\\\',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Local\\\\Microsoft\\\\WindowsApps',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Local\\\\GitHubDesktop\\\\bin',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Local\\\\Programs\\\\Microsoft VS Code\\\\bin',
 'C:\\\\Users\\\\volka\\\\.dotnet\\\\tools',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Anaconda3 (64-bit)',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Local\\\\Yarn\\\\bin',
 'C:\\\\Program Files (x86)\\\\Yarn\\\\bin',
 'C:\\\\Users\\\\volka\\\\Anaconda3\\\\Lib\\\\site-packages\\\\pip',
 'C:\\\\Users\\\\volka\\\\AppData\\\\Roaming\\\\Python\\\\Python38\\\\Scripts',
 "']"]
In [45]:
!where python
C:\Users\volka\AppData\Local\Programs\Python\Python38-32\python.exe
C:\Users\volka\AppData\Local\Microsoft\WindowsApps\python.exe
In [48]:
!deactivate

Veri Tipleri

In [8]:
i=1
f=1.0
s="merhaba"
#bu bir yorum
"""
merhaba
Bu 3 tırnak ifadesi fonksiyonların docstringi amaçlı kullanılır
Ankca çok satıra yayılan yorumlar için de kullanılabilir
"""
print(type(i))
print(type(f))
print(type(s))
<class 'int'>
<class 'float'>
<class 'str'>
In [9]:
#Legal variable names:
myvar = "John"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"
In [10]:
#Illegal variable names:
# 2myvar = "John"
# my-var = "John"
# my var = "John"
In [11]:
#çoklu değer atama
x, y, z = "Orange", "Banana", "Cherry"
print(x)
print(y)
print(z)
Orange
Banana
Cherry
In [12]:
#exponential
x = 1e9
y = 123E9
x
y
Out[12]:
123000000000.0

Veri tipi dönüştürme

In [17]:
y=float(1)
z=int(2.8)
s=str(y)

y,type(y)
z,type(z)
s,type(s)
print(s,type(s))
Out[17]:
(1.0, float)
Out[17]:
(2, int)
Out[17]:
('1.0', str)
1.0 <class 'str'>
In [18]:
z="1"
y=int(z)
type(y)
Out[18]:
int
In [19]:
x=1
print(isinstance(x,int))
True

Fonksiyonlar

Klasik fonksiyon

Genel olarak fonksiyonların ne olduğunu başka bir dokümandan öğrenmiş olmanız beklenimektedir. Başta da belirttiğim gibi bu dokümanın amacı büyük bir cheatsheet sağlamak.

In [31]:
def islem_yapan_parametresiz_fonksiyon(): #c tabanlı dillerdeki void dönüş tipi
    print("selam")
    
islem_yapan_parametresiz_fonksiyon()
selam
In [2]:
def sonuc_donduren_ve_parametre_almis_fonksiyon(karesi_alinacak_sayi):
    """
    bu fonksiyon kendisine gelen sayının karesini döndürür
    Args:
        karesi_alinacak_sayi: sayı
    """
    return karesi_alinacak_sayi**2

sonuc=sonuc_donduren_ve_parametre_almis_fonksiyon(4) #dönen sonucu bi dğeişkene atıyorum
print(sonuc)
16
In [33]:
#pythonda fonksiyonlar bazı dillerdeki durumun aksine çok değer döndürülebilir.
def cokdegerdondur(sayı):
    return sayı,sayı*10,sayı*100

kendi,onkat,yuzkat=cokdegerdondur(5)
print(onkat)
print(kendi)
50
5

Paramarray ile esnek sayıda parametre kullanımı ve default değer kavramı

Parametreler belirlenmiş sayıda olmak zorunda değil. Esnek sayıda parametre alma imkanı var.

In [1]:
def SayılarıToplaXeBöl(arg1,*args): #arg1 olmak zorunda değil, ama olacaksa paramarrayden önce olmalı
    """
    Bu fonksiyon ilk parametreden sonrakileri toplayıp ilk parametreye böler
    """
    Toplam=0
    for a in args:
        Toplam+=a
    return Toplam/arg1

x=SayılarıToplaXeBöl(10,1,2,3,4,5,6,7,8,9,10) #parametreler hardcoded yazıldıysa "*" yazmıyoruz. 
print(x)  
y=SayılarıToplaXeBöl(10,*range(1,11)) #parametreler bir fonksiyon ile dönüyorsa veya bir değişkense "*" var
print(y)
5.5
5.5
In [35]:
def dictparametreli(**kwargs): #** olursa parametre olarak dictioanry alır
    for k,v in kwargs.items():
        print(k,v)

dict_={}
dict_["ad"]="Volkan"
dict_["soyad"]="Yurtseven"
dictparametreli(**dict_) #değişken şeklinde olduğu için ** ile 
ad Volkan
soyad Yurtseven

Bazı parametreler default değerleriyle yazılırlar. Fonksiyona ilgili değer geçirilimezse bu default değer kullanılır

In [36]:
def opsiyonelli(adet,min_=1, max_=10):
    print(adet,min_,max_)

opsiyonelli(100,5) #son parametre 10 geçer
100 5 10

Lambda ve anonymous function

Lambda ifadeler, fonksiyon tanımlamak yerine inline şekilde işlem yapmaya imkan verir

In [37]:
def kareal(sayı):
    return sayı**2

#yukarıdaki fonksiyonu tanımlamak yerine lambda yazabilriz
kareal2=lambda x:x**2

print(kareal(10))
print(kareal2(10))
100
100
In [28]:
def KelimeSay(metin):
    kelimeler = [m for m in metin.replace(",","").split(" ")]
    print(" ".join(sorted(list(set(kelimeler)))))
    
KelimeSay("sen seni bil sen seni, yoksa severim seni")
bil sen seni severim yoksa

Stringler

Slicing

In [38]:
from utility import * #kendi yazdığım utility modülünü import ediyorum. burada farklı print şekilleri var. 
#satır numarsını yazdırmak gibi. View menüsünden Toggle Line Numbers yapmış olmanız lazım.
In [39]:
metin="volkan yurtseven"
printy(metin[0])
printy(metin[:3]) #left 3
printy(metin[4:]) #substr
printy(metin[2:5]) #substr
printy(metin[-1]) #son
printy(metin[-3:]) #right 3
printy(metin[::-1]) #ters
2 ----------
v
 
3 ----------
vol
 
4 ----------
an yurtseven
 
5 ----------
lka
 
6 ----------
n
 
7 ----------
ven
 
8 ----------
nevestruy naklov
 

String formatlama

In [40]:
mesaj="İnsanların yaklaşık %s kadın olup %s erkektir" % ("yarısı","kalanı")
mesaj
#s:string, d:sayı
Out[40]:
'İnsanların yaklaşık yarısı kadın olup kalanı erkektir'
In [41]:
#daha çok bu yöntem, {}
mesaj="Python {} bir dildir".format("güzel")
mesaj
Out[41]:
'Python güzel bir dildir'
In [4]:
#en son yöntem: f-string
ad="volkan"
yas=41
print(f"Benim adım {ad} olup yaşım {yas}")
Benim adım volkan olup yaşım 41
In [42]:
# ya da + ile basit concat
mesaj="python"
mesaj=mesaj + " güzel bir dildir"
mesaj
Out[42]:
'python güzel bir dildir'

metinsel fonksiyonlar

In [43]:
parçalı=metin.split()
parçalı
Out[43]:
['volkan', 'yurtseven']
In [44]:
print(metin*3)
volkan yurtsevenvolkan yurtsevenvolkan yurtseven
In [45]:
metin.replace("e","i")
Out[45]:
'volkan yurtsivin'
In [46]:
print(metin.upper(), metin.lower(), metin.capitalize(), metin.title())
VOLKAN YURTSEVEN volkan yurtseven Volkan yurtseven Volkan Yurtseven
In [47]:
print(metin.startswith("v"),metin.endswith("d"))
True False
In [48]:
kelime="     naber   dostum     " 
print("yeni:"+kelime.strip()+".") #ortadakini silmez
yeni:naber   dostum.

özel karekterler ve literaller

In [2]:
#escape
print("Şifre:\"abc123\"")
print("c:\\python\\abc\\xyz\\sdf")
print(r"c:\python\abc\xyz\sdf") #r:raw, escape char'ı görmezden gel demek
Şifre:"abc123"
c:\python\abc\xyz\sdf
c:\python\abc\xyz\sdf

image.png

In [4]:
#literaller: b,r,f
a=b"volkan" 
b="volkan"
print(type(a))
print(type(b))
<class 'bytes'>
<class 'str'>
In [5]:
import sys
sys.getsizeof(a)
sys.getsizeof(b)
Out[5]:
55
In [7]:
adres1="c:\\falanca\\filanca"
adres2=r"c:\falanca\filanca"
adres1==adres2
Out[7]:
True

diğer işlemler

In [49]:
#liste çevirme
liste=list(metin)
print(liste)
['v', 'o', 'l', 'k', 'a', 'n', ' ', 'y', 'u', 'r', 't', 's', 'e', 'v', 'e', 'n']
In [50]:
#içinde var mı kontrolü
print("l" in metin)
print(metin.find("z")) #bulamazsa -1
print(metin.index("z")) #bulamazsa hata alır
True
-1
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-50-3046aed2f641> in <module>
      2 print("l" in metin)
      3 print(metin.find("z")) #bulamazsa -1
----> 4 print(metin.index("z")) #bulamazsa hata alır

ValueError: substring not found
In [51]:
for m in metin:
    print(m,end="\n")
v
o
l
k
a
n
 
y
u
r
t
s
e
v
e
n
In [52]:
#aralarda boşluk falan varsa "r" başta olacak şekilde kullanırız. c#'taki @ gibi
path=r"E:\falan filan klasörü\sub klasör"
In [53]:
metin.count("e") #metin değişkeninde e harfi kaç kez geçiyor
Out[53]:
2

string modülü

In [13]:
import string
In [16]:
string.punctuation
string.printable
string.whitespace
string.digits
string.ascii_letters
Out[16]:
'!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~'
Out[16]:
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~ \t\n\r\x0b\x0c'
Out[16]:
' \t\n\r\x0b\x0c'
Out[16]:
'0123456789'
Out[16]:
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

Koşullu yapılar

Koşullu yapılar, döngüler ve veri yapıları tüm programalama dillerinin ortak özellikleri olup iyi kavranması gerekirler. Bu konuda kendinizi test edeceğiniz güzel bir site var. Burada çeştli konularda kolaydan zora kadar farklı seviyelerde sorular var, bunları çözüp gönderiyorsunuz, puan kazanıyorsunuz. bu siteyi kullanmanızı tavsiye ederim.

https://www.hackerrank.com

In [54]:
i=10 #bunu sırasıyla 10,20 ve 30 yapark çalışıtırın
if i<20:
    print("20den küçük")
elif i==20: #çift =
    print("tam 20")
else:
    print("20den büyük")
20den küçük
In [55]:
#one-liner -(ternary) if-else
x=3
sonuc="high" if x>10 else "low"
print(sonuc)
low

Döngüler

Genelde list, dict gibi veri yapıları içinde dolaşmaya yararlar. Bu veri yapılarını az aşağıda detaylı göreceğiz

iki tür döngü yapımız var. while ve for.
for, foreach şeklindedir, klasik for yok. onun yerine range fonksiyonundan yararlanılabilir.

In [56]:
fruits = ["apple", "banana", "cherry"]
for x in fruits:
    print(x)
apple
banana
cherry
In [57]:
#klasik for için range kullanımı.
for i in range(len(fruits)):
    print(fruits[i])
apple
banana
cherry
In [58]:
#metinler de loop ile dolaşılabilir
isim="volkan"
for i in isim:
    print(i,end="-")
v-o-l-k-a-n-
In [59]:
#döngüden çıkış
fruits = ["apple", "banana", "cherry"]
for x in fruits:
    print(x)
    if x == "banana":
        break
apple
banana
In [60]:
#while ile bir şart gerçekleş(me)tiği sürece döngüde kalırız
i = 1
while i < 6:
    print(i)
    i += 1
1
2
3
4
5
In [61]:
#belirli bir ara şart gerçekleşirse döngüden çıkabiliriz
i = 1
while i < 6:
    print(i)
    if i == 3:
        break
    i += 1
1
2
3
In [62]:
#hackerrank sitesindeki bir ödev
def staircase(n):
    for i in range(n):
        print((n-i-1)*" "+"#"*(i+1))
staircase(6)
     #
    ##
   ###
  ####
 #####
######

Döngü içinde "else" kullanımı

for döngülerinde

tüm liste bittiğinde son olarak bu kısım yürütülür

In [63]:
for i in range(4):
    print(i)
else:
    print("bitti")
0
1
2
3
bitti
In [64]:
for num in range(10,20):
    for i in range(2,num):
        if num%i==0:
            j=num/i
            print("{} equals {}*{}".format(num,i,j))
            break
    else:
        print(num," bir asal sayıdır")
10 equals 2*5.0
11  bir asal sayıdır
12 equals 2*6.0
13  bir asal sayıdır
14 equals 2*7.0
15 equals 3*5.0
16 equals 2*8.0
17  bir asal sayıdır
18 equals 2*9.0
19  bir asal sayıdır

while döngülerinde

koşul sağlanmadığında yürütülür

In [65]:
n=5
while n!=0:
    print(n)
    n-=1
else:
    print("artık sağlanmıyor")
5
4
3
2
1
artık sağlanmıyor

içiçe döngülerden çıkış

içiçe döngü varsa, break ifadesi en içteki döngüden çıkar ve o bloktan sonraki ilk satırdan devam eder

iç döngüden çıkış, dış döngüye devam

In [24]:
liste=[]
for x in list("bacde"):
    for z in ["ali","dursun","ıtır","emel","cemil"]:
        print(x,z) #kontrol için
        if x in z:
            print(f"{z} ekleniyor ve iç döngüden çıkış yapılacak\n")
            liste.append(z)
            break #bir kez ekledikten sonra çıkıyorum, o yüzden mükerrer ekleme olmuyor, comment/uncomment
    else:
        print(f"{x} için iç döngüde eşleşme bulunamadı\n")
print(liste)
b ali
b dursun
b ıtır
b emel
b cemil
b için iç döngüde eşleşme bulunamadı

a ali
ali ekleniyor ve iç döngüden çıkış yapılacak

c ali
c dursun
c ıtır
c emel
c cemil
cemil ekleniyor ve iç döngüden çıkış yapılacak

d ali
d dursun
dursun ekleniyor ve iç döngüden çıkış yapılacak

e ali
e dursun
e ıtır
e emel
emel ekleniyor ve iç döngüden çıkış yapılacak

['ali', 'cemil', 'dursun', 'emel']

tüm döngüden çıkış

In [25]:
#herhangi birinin olması yeterliyse, ilk gördüğümü ekleyip çıkayım
liste=[]
for x in list("bkcde"): #a'yı k yapalım
    for z in ["ali","dursun","ıtır","emel","cemil"]:
        print(x,z) #kontrol için
        if x in z:
            print(f"{z} ekleniyor ve tüm döngüden çıkış yapılacak\n")
            liste.append(z)
            break
    else:
        print(f"dış döngüdeki {x} için tur tamamlandı,sonraki için devam\n")
        continue      
    break #iç döngüden çıkıldığında buraya gelinir
    
print(liste)
b ali
b dursun
b ıtır
b emel
b cemil
dış döngüdeki b için tur tamamlandı,sonraki için devam

k ali
k dursun
k ıtır
k emel
k cemil
dış döngüdeki k için tur tamamlandı,sonraki için devam

c ali
c dursun
c ıtır
c emel
c cemil
cemil ekleniyor ve tüm döngüden çıkış yapılacak

['cemil']
In [69]:
#iki dizidekilerin toplamı 20den büyük olduğunda çık
dizi=[[11,21,3],[5,15,6]]
records=[]

for j in dizi[0]:
    for i in dizi[1]:        
        if j+i>20:
            records.append((j,i,j+i))
            break
    else:
        continue
    break

records
Out[69]:
[(11, 15, 26)]
In [70]:
#2.yöntem. bi fonk içinte return kullanmak
records=[]
def myfonk():
    dizi=[[11,21,3],[5,15,6]]    
    for j in dizi[0]:
        for i in dizi[1]:        
            if j+i>20:
                records.append((j,i,j+i))
                return

myfonk()
print(records)
[(11, 15, 26)]
In [71]:
#3.yöntem: exception
records=[]
try:
    dizi=[[11,21,3],[5,15,6]]    
    for j in dizi[0]:
        for i in dizi[1]:        
            if j+i>20:
                records.append((j,i,j+i))
                raise StopIteration
except StopIteration: pass
records
Out[71]:
[(11, 15, 26)]

Data Structures(Veri yapıları)

List

In [72]:
liste=[0,1,2,3,4,5]
liste.append(6)
print(liste[:2]) #stringler gibi slicing yapılır
print(3 in liste) #üyelik kontrolü
[0, 1]
True
In [73]:
son=liste.pop() #son elemanı çıkarıp buna atar
print(son)
print(liste)
6
[0, 1, 2, 3, 4, 5]
In [74]:
rangelist=list(range(0,100,3))
print(rangelist)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

Sıralama

Sort metodu bir listeyi kendi üstünde sıralar, sonuç olarak birşey döndürmez. yani sıralanmış listeyi bir değişkene atayamayız. sıralanmış halini başka bir değişkene atamak istersek sorted fonkisyonunu kullanırız.

In [75]:
meyveler=["elma","muz","portakal","çilek","üzüm","armut","muz"]
printy(meyveler.index("muz")) #ilk gördüğün indeksi
printy(meyveler.count("muz"))
meyveler.sort()
printy(meyveler)
meyveler.reverse()
printy(meyveler)
2 ----------
1
 
3 ----------
2
 
5 ----------
['armut', 'elma', 'muz', 'muz', 'portakal', 'çilek', 'üzüm']
 
7 ----------
['üzüm', 'çilek', 'portakal', 'muz', 'muz', 'elma', 'armut']
 
In [76]:
siralimeyveler=sorted(meyveler,reverse=True) #ayrıca tersten sırala demiş olduk. bu parametre normal sort metodunda da var
print(siralimeyveler)
['üzüm', 'çilek', 'portakal', 'muz', 'muz', 'elma', 'armut']

Tuple

List gibi ama değişmez yapılardır yani eleman eklenip çıkarılamaz. [] yerine () veya parantezsiz

In [77]:
tpl=(1,2,3)
tpl2=1,2,3
print(type(tpl2))
<class 'tuple'>

Comprehension

tüm veri yapılarıyla uygulanabilir. uzun döngü yazmaktan kurtarır. c#'taki LINQ işlemlerinin benzer hatta daha güzel alternatifi

In [78]:
rangelistinikikatı=[x*2 for x in rangelist]
print(rangelistinikikatı)
[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198]

koşullu comprehension

[x for x in datastruct if x ...]
[x if ... else y for x in datastruct]

In [79]:
kısaisimlimeyveler=[x for x in meyveler if len(x)<5]
kısaisimlimeyveler
Out[79]:
['üzüm', 'muz', 'muz', 'elma']
In [80]:
liste=range(1,10)
sadecetekler=[sayı for sayı in liste if sayı % 2 !=0] #tek if
tekler=[sayı if sayı%2!=0 else "" for sayı in liste] #if-else
print(sadecetekler)
print(tekler)
[1, 3, 5, 7, 9]
[1, '', 3, '', 5, '', 7, '', 9]

içiçe(nested) list comprehension

syntax:[x for iç in dış for x in iç]

2 boyutlu bir matrisi düzleştirmek istiyorum
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Beklediğimiz çıktı: flatten_matrix = [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [81]:
# 2-D List 
matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] 

flatten_matrix = [] 

for sublist in matrix: 
	for val in sublist: 
		flatten_matrix.append(val) 
		
print(flatten_matrix) 
[1, 2, 3, 4, 5, 6, 7, 8, 9]
In [82]:
# 2-D List 
matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] 

# Nested List Comprehension to flatten a given 2-D matrix 
flatten_matrix = [val for sublist in matrix for val in sublist] 

print(flatten_matrix) 
[1, 2, 3, 4, 5, 6, 7, 8, 9]
In [83]:
# 2-D List of planets 
planets = [['Mercury', 'Venus', 'Earth'], ['Mars', 'Jupiter', 'Saturn'], ['Uranus', 'Neptune', 'Pluto']] 

flatten_planets = [] 

for sublist in planets: 
	for planet in sublist: 
		
		if len(planet) < 6: 
			flatten_planets.append(planet) 
		
print(flatten_planets) 
['Venus', 'Earth', 'Mars', 'Pluto']
In [84]:
flatten_planets = [planet for sublist in planets for planet in sublist if len(planet) < 6] 
print(flatten_planets)
['Venus', 'Earth', 'Mars', 'Pluto']
In [85]:
kısalar=[p for  in planets for p in  if len(p)<6]
kısalar
Out[85]:
['Venus', 'Earth', 'Mars', 'Pluto']

Daha genel bir gösterim için https://stackoverflow.com/questions/18072759/list-comprehension-on-a-nested-list sayfasındaki gif animasyonlu açıklamaya bakınız

Matrisler ve matrislerde comprehension

In [86]:
matris=[
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
print(len(matris))
printy([satır for satır in matris]) #satır satır
printy([satır[0] for satır in matris]) #ilk sütun
printy([[satır[i] for satır in matris] for i in range(3)]) #sütun sütun, transpozesi
printy([x for  in matris for x in ]) #nested
3
7 ----------
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 
8 ----------
[1, 4, 7]
 
9 ----------
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
 
10 ----------
[1, 2, 3, 4, 5, 6, 7, 8, 9]
 

amaç aşağıdakini elde etmek olsun

matrix = [[0, 1, 2, 3, 4],
          [0, 1, 2, 3, 4],
          [0, 1, 2, 3, 4],
          [0, 1, 2, 3, 4],
          [0, 1, 2, 3, 4]]
In [87]:
matrix = [] 

for i in range(5): 
	
	# Append an empty sublist inside the list 
	matrix.append([]) 
	
	for j in range(5): 
		matrix[i].append(j) 
		
print(matrix) 
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
In [88]:
# Nested list comprehension 
matrix = [[j for j in range(5)] for i in range(5)] 

print(matrix) 
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

Stack

Normalde böyle bi sınıf yok. list'i stack gibi kullanırız. append ve pop sayesinde. ilk giren ilk çıkar

In [89]:
stack=[1,2,3]
stack.append(4)
stack.pop()
stack
Out[89]:
[1, 2, 3]

Queue

Bunu da istersek listten yaparız, ilk giren son çıkar. ama bunun için collections modülünde bi sınıf var

In [90]:
from collections import deque
kuyruk=deque([1,2,3])
kuyruk.append(4)
sıradaki=kuyruk.popleft()
print(sıradaki)
print(kuyruk)
1
deque([2, 3, 4])

Dictionary

Key-value ikililerini tutarlar. Sırasızdırlar(EDIT:Python 3.7den itibaren girdilen sırayı korur), indeksle ulaşamayız. key'lerle valuelara ulaşırız veya döngü içinde dolanarak ikisine birden tek seferde de ulaşabiliriz.

Yaratım

Klasik

In [91]:
dict_={}
dict_["one"]="bir" #add,append, insert gibi bir metodu yok, direkt atanıyor
dict_["two"]="iki"
dict_["two"]="zwei"
printy(dict_.keys())
printy(dict_.values())
printy(dict_.items())
print(dict_["one"])
#print(dict_["three"]) # hata alır, almaması için get kullan
print(dict_.get("three","N/A"))
5 ----------
dict_keys(['one', 'two'])
 
6 ----------
dict_values(['bir', 'zwei'])
 
7 ----------
dict_items([('one', 'bir'), ('two', 'zwei')])
 
bir
N/A

dict metodu ile ikili elemanlardan oluşan bir yapıdan

bu ikili yapılar genelde zip veya enumerate olacaktır. bakınız ilgili fonksiyonar.

In [92]:
tpl=[("one","bir"),("two","iki"),("three","üç")]
dict_=dict(tpl)
print(type(dict_))
dict_["one"]
<class 'dict'>
Out[92]:
'bir'

comprehension ile

In [93]:
sayılar=list(range(10))
ciftlerinkaresi={x: x**2 for x in sayılar if x%2==0}
print(ciftlerinkaresi.items())
dict_items([(0, 0), (2, 4), (4, 16), (6, 36), (8, 64)])

elemanlarda dolaşma

In [94]:
for k,v in ciftlerinkaresi.items():
    print(k,v)
0 0
2 4
4 16
6 36
8 64

çeşitli metodlar

In [95]:
ciftlerinkaresi.clear()
ciftlerinkaresi.items()
del ciftlerinkaresi
ciftlerinkaresi #hata verir, artık bellekten uçtu
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-95-5456f308aa21> in <module>
      2 ciftlerinkaresi.items()
      3 del ciftlerinkaresi
----> 4 ciftlerinkaresi #hata verir, artık bellekten uçtu

NameError: name 'ciftlerinkaresi' is not defined

Set

Bunlar da dict gibi sırasızdır. dict gibi {} içinde tanımlanırlar. uniqe değerleri tutarlar. bir listteki duplikeleri ayırmak ve membership kontrolü için çok kullanılırlar

In [96]:
liste=[1,1,2,3,4,4,5]
set_=set(liste)
set_
Out[96]:
{1, 2, 3, 4, 5}
In [97]:
set1={1,2,3,4,5}
set2={2,3,4}
set3={2,3,4,5,6}

printy(set1,set2,set3)
printy("----diff")
printy(set1.difference(set2))
printy(set1.difference(set3))
printy(set2.difference(set1))
printy(set2.difference(set3))
printy(set3.difference(set1))
printy(set3.difference(set2))
printy("- intersection----")
printy(set1.intersection(set2))
printy(set1.intersection(set3))
printy(set2.intersection(set1))
printy(set2.intersection(set3))
printy(set3.intersection(set1))
printy(set3.intersection(set2))
printy("----union---")
printy(set1.union(set2))
printy(set1.union(set3))
printy(set2.union(set1))
printy(set2.union(set3))
printy(set3.union(set1))
printy(set3.union(set2))
5 ----------
{1, 2, 3, 4, 5} {2, 3, 4} {2, 3, 4, 5, 6}
 
6 ----------
----diff
 
7 ----------
{1, 5}
 
8 ----------
{1}
 
9 ----------
set()
 
10 ----------
set()
 
11 ----------
{6}
 
12 ----------
{5, 6}
 
13 ----------
- intersection----
 
14 ----------
{2, 3, 4}
 
15 ----------
{2, 3, 4, 5}
 
16 ----------
{2, 3, 4}
 
17 ----------
{2, 3, 4}
 
18 ----------
{2, 3, 4, 5}
 
19 ----------
{2, 3, 4}
 
20 ----------
----union---
 
21 ----------
{1, 2, 3, 4, 5}
 
22 ----------
{1, 2, 3, 4, 5, 6}
 
23 ----------
{1, 2, 3, 4, 5}
 
24 ----------
{2, 3, 4, 5, 6}
 
25 ----------
{1, 2, 3, 4, 5, 6}
 
26 ----------
{2, 3, 4, 5, 6}
 

Not: Yukarıdaki altalta aynı hizada olan tüm printy ifadesini tek seferde yapmanın yolu var. ben mesela bunların hepsi print iken printy'yi tek seferde yaptım. Alt tuşuna basarak seçmek. aşağıdaki gibi seçip t tuşuna basarsam tüm ty'ler t olur.

image.png

Zip

In [98]:
x=[1,2,3]
y=[10,20,30]
onkatlar=zip(x,y)
#print(list(onkatlar)) #yazdırmak için liste çevir. bi kez liste çevirlince artık zip özelliği kalmaz, 
#o yüzden alttaki blok çalışmaz,o yüzden geçici olarak commentledim. deneyin ve görün
In [99]:
#tekrar ayırmak için
x2, y2 = zip(*onkatlar)
x2
Out[99]:
(1, 2, 3)

Zip vs Dict

In [100]:
a=[1,2,3]
b=[10,20,30]
c=zip(a,b)
for i,j in c:
    print(i,j)
1 10
2 20
3 30
In [101]:
a=[1,2,3]
b=[10,20,30]
c=zip(a,b)
print(type(list(c)[0]))
dict_=dict(c) #zipten dict üretimi
for k,v in dict_.items():
    print(k,v)
<class 'tuple'>

Listlerle kullanılan önemli fonksiyonlar

Map ve Reduce

Map: bir veri yapısındaki elemanları sırayla bir fonksiyona gönderir ve sonuç yine bir veri yapısıdır
Reduce: elemanları sırayla gönderir, bir eritme mantığı var, her bir önceki elamnını sonucyla bir sonraki eleman işleme girer

Map

In [102]:
items=[1,2,3,4,5]
def kareal(sayı):
    return sayı**2

kareler=map(kareal,items) #lambdalı da olur. map(lambda x: x**2, items)
list(kareler) #yazdırmak için liste çevir
Out[102]:
[1, 4, 9, 16, 25]
In [103]:
#birden fazla veri yapısı da girebilir işleme
range1=range(1,10)
range2=range(1,20,2)

mymap=map(lambda x,y:x*y,range1,range2)
for i in mymap:
    print(i)
1
6
15
28
45
66
91
120
153
In [104]:
#comprehensionla da yapılabilir.
çarpım=[x*y for x,y in zip(range1,range2)]
çarpım
Out[104]:
[1, 6, 15, 28, 45, 66, 91, 120, 153]
In [105]:
harfler=map(chr,range(97,112))
list(harfler)
Out[105]:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o']
In [106]:
harfler2=[chr(x) for x in range(97,112)]
harfler2
Out[106]:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o']

Reduce

In [107]:
from functools import reduce
def faktoriyel(sayı1,sayı2):
    return sayı1*sayı2

sayılar=range(1,10)
fakt=reduce(faktoriyel,sayılar)
fakt
Out[107]:
362880

Filter

In [1]:
ages = [5, 12, 17, 18, 24, 32]

def myFunc(x):
    if x < 18:
        return False
    else:
        return True

adults = filter(myFunc, ages)

for x in adults:
    print(x)
18
24
32
In [5]:
#veya lambda ile
list(filter(lambda x:x>=18,ages))
Out[5]:
[18, 24, 32]

Enumerate

In [108]:
aylar=["Ocak","Şubat","Mart"]
print(list(enumerate(aylar,start=1)))
dict_=dict(enumerate(aylar,start=1))
for k,v in dict_.items():
    print(k,v)
[(1, 'Ocak'), (2, 'Şubat'), (3, 'Mart')]
1 Ocak
2 Şubat
3 Mart

All ve Any

In [109]:
liste1=[True,True,False]
liste2=[True,True,True]
print(all(liste1))
print(any(liste1))
print(all(liste2))
False
True
True

Date Time işlemleri

Modüller ve üyeleri

In [110]:
import datetime as dt
import time as t
import timeit as tit
import dateutil as du
#import timer as tr #bu threadlerle ilgili kullanma, settimer ve killtimer var

datetime

In [111]:
print([i for i in dir(dt) if not "__" in i])
['MAXYEAR', 'MINYEAR', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
In [112]:
print(dt.datetime.now())
print(dt.datetime.now().hour) #saliseden yıla kadar hepsi elde edilebilir
print(dt.date.today())
print(dt.date.today().year)
print(dt.date(2019,4,3))
2020-01-16 20:44:06.031080
20
2020-01-16
2020
2019-04-03

time (süre ölçümlerinde bunu kullancaz, bundaki time metodunu)

In [113]:
print([i for i in dir(t) if not "__" in i])
['_STRUCT_TM_ITEMS', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
In [114]:
print([i for i in dir(tit) if not "__" in i])
['Timer', '_globals', 'default_number', 'default_repeat', 'default_timer', 'dummy_src_name', 'gc', 'itertools', 'main', 'reindent', 'repeat', 'sys', 'template', 'time', 'timeit']

dateutil

In [115]:
print([i for i in dir(du) if not "__" in i])
['_common', '_version', 'parser', 'relativedelta', 'tz']

Süre ölçümü

Performans amaçlı süre ölçümü(sonuçtan bağımsız)

  • %'li olanı bir fonksiyon takip eder, %%'li kullanımda ise alt satırdan yazarsın.
  • Time olan tek seferlik run'ın süresini verirken timeit onlarca kez çalıştırıp ortalama süre verir
In [116]:
%%timeit
x=sum(range(1000000))
78.9 ms ± 3.45 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [13]:
%%time
x=sum(range(1000000))
Wall time: 154 ms
In [118]:
def hesapla():    
    y=sum(range(1000000))
    
%timeit hesapla()
75.6 ms ± 1.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Süreyle birlikte sonuç görme

In [119]:
#tit.Timer(hesapla).timeit() uzun sürüyo ve bitmiyo ??
In [120]:
bas=t.time()
print("hey")
hesapla()
bit=t.time()
print("süre:{}".format(bit-bas))
hey
süre:0.07879209518432617

jupyter nbextensions

image.png

nbextensionsı hala kurmadıysanız alın size bir sebep daha. bu süre ölçümü kodlarına gerek yok. yukarıdaki eklentiyle her hücrenin çalışma süresini veriyor. Bir örnek:

image.png

Önemli bazı modüller

Aşağıda önemli olduğunu düşündüğüm bazı modülleri bulacaksınız. Tabiki bunların dışında da başak kütüphaneler/modüller var, bunları da zamanla öğreneceksiniz.

os

İşletim sisteminden bağımsız çalışacak bir koda(dosyalama sistemi v.s ile ilgili) ihtiyacımız olduğunda os modülünü kullanırız.

Klasör ve dosya işlemleri

In [6]:
import os
os.getcwd() #o anki aktif folder
os.curdir #mevcut dizini temsil eden karakter, genelde bu . oluyor. Bunu daha çok prefix path olarak kullanırız
Out[6]:
'E:\\OneDrive\\Dökümanlar\\GitHub\\PythonRocks'
Out[6]:
'.'
In [8]:
os.chdir(os.curdir + "\.git") #aktif klasörü değiştiriyoruz
In [9]:
os.pardir #parent klasörü temsil eden karakter
Out[9]:
'..'
In [10]:
os.listdir() #o anki aktif folderdaki dosyaları lsiteler
Out[10]:
['COMMIT_EDITMSG',
 'config',
 'description',
 'FETCH_HEAD',
 'HEAD',
 'hooks',
 'index',
 'info',
 'logs',
 'objects',
 'ORIG_HEAD',
 'refs']
In [11]:
os.listdir(os.pardir)
Out[11]:
['.git',
 '.gitattributes',
 '.gitignore',
 '.ipynb_checkpoints',
 '.vscode',
 'abc.txt',
 'AutoML.py',
 'cheatsheet.png',
 'Classification Examples.ipynb',
 'EDA with Python.ipynb',
 'EDA.py',
 'LICENSE',
 'Machine Learning with Spotify.ipynb',
 'Numpy Pandas challenge.ipynb',
 'Python Challenges.ipynb',
 'Python Genel.ipynb',
 'Python ile Machine Learning.ipynb',
 'Python ile Veri Analizi.ipynb',
 'README.md',
 'Regression Examples.ipynb',
 'test.cs',
 'test.txt',
 'Untitled.ipynb',
 'Untitled1.ipynb',
 'utility.py',
 '__pycache__']
In [126]:
os.path.exists('Python Genel.ipynb') #bir dosya/klasör mevcut mu
Out[126]:
True
In [127]:
os.path.isfile('olmayandosya.txt') #parametredeki bir dosya mı? veya bir dosya mevcut mu anlamında da kullanılabilir.
Out[127]:
False
In [128]:
os.path.isdir("klasor")
Out[128]:
False
In [129]:
# list all files in a directory in Python.
from os import listdir
from os.path import isfile, join
p=os.getcwd()
files_list = [f for f in listdir(p) if isfile(join(p, f))]
print(files_list);
['.gitattributes', '.gitignore', 'abc.txt', 'cheatsheet.png', 'LICENSE', 'Python Genel.ipynb', 'Python ile Veri Analizi.ipynb', 'test.txt', 'utility.py']
In [130]:
dizin= r"E:\OneDrive\udemy dosyaları\vba2\FSO Örnek"
for kökdizin, altdizinler, dosyalar in os.walk(dizin):
    print(kökdizin)
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a1
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a1\a11
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a1\a12
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a2
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\Yeni klasör
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\b
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\b\b1
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\c
In [131]:
for kökdizin, altdizinler, dosyalar in os.walk(dizin):
    for dosya in dosyalar:
        print(os.sep.join([kökdizin, dosya]))
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\mevcut klasör yeni.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\roo1.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\roo2.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a_roo1.accdb
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a_roo2.pptx
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\mevcutyeni2.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a1\a1_roo1.pub
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a1\a11\a11_1.bmp
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a1\a11\a11_2.xlsx
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a1\a12\a12_1.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a2\a2_.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a2\a2_2.accdb
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\a2\a2_3.docx
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\a\Yeni klasör\yeniklasörde.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\b\b_roo1.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\b\b_roo2.xlsx
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\b\b1\b1_1.bmp
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\b\b1\b1_2.txt
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\b\b1\b1_3.pptx
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\c\c_1.bmp
E:\OneDrive\udemy dosyaları\vba2\FSO Örnek\c\c_2.txt
In [132]:
import os.path, time, datetime
print("Last modified: %s" % os.path.getmtime("abc.txt")) #formatlanmamış
print("Created: %s" % time.ctime(os.path.getctime("abc.txt")))
Last modified: 1579164058.249096
Created: Thu Jan 16 11:40:54 2020
In [133]:
os.startfile('calc.exe') #dosya açar, program başaltır, internet sitesine gider v.s
In [134]:
os.startfile(r'E:\OneDrive\Uygulama Geliştirme\PDF dokümantasyon\AI & DS\Pandas & EDA & ML\pandas.pdf')
In [135]:
os.startfile("www.volkanyurtseven.com")

Sistem ve Environment bilgileri

In [136]:
import platform, os
print(os.name)
print(platform.system())
print(platform.release())
nt
Windows
10
In [137]:
dict(os.environ)
Out[137]:
{'ALLUSERSPROFILE': 'C:\\ProgramData',
 'APPDATA': 'C:\\Users\\volka\\AppData\\Roaming',
 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files',
 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files',
 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files',
 'COMPUTERNAME': 'YENILENOVO',
 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe',
 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData',
 'FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer',
 'FPS_BROWSER_USER_PROFILE_STRING': 'Default',
 'HOMEDRIVE': 'C:',
 'HOMEPATH': '\\Users\\volka',
 'LOCALAPPDATA': 'C:\\Users\\volka\\AppData\\Local',
 'LOGONSERVER': '\\\\YENILENOVO',
 'NUMBER_OF_PROCESSORS': '8',
 'ONEDRIVE': 'E:\\OneDrive',
 'ONEDRIVECONSUMER': 'E:\\OneDrive',
 'OS': 'Windows_NT',
 'PATH': 'C:\\Users\\volka\\Anaconda3;C:\\Users\\volka\\Anaconda3\\Library\\mingw-w64\\bin;C:\\Users\\volka\\Anaconda3\\Library\\usr\\bin;C:\\Users\\volka\\Anaconda3\\Library\\bin;C:\\Users\\volka\\Anaconda3\\Scripts;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files\\dotnet\\;C:\\Program Files\\Microsoft SQL Server\\130\\Tools\\Binn\\;C:\\Program Files\\Microsoft SQL Server\\Client SDK\\ODBC\\170\\Tools\\Binn\\;C:\\Program Files (x86)\\LINQPad5;C:\\Program Files (x86)\\Microsoft SQL Server\\150\\DTS\\Binn\\;E:\\Program Files\\Brackets\\command;C:\\Users\\volka\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\volka\\AppData\\Local\\GitHubDesktop\\bin;C:\\Users\\volka\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\volka\\.dotnet\\tools;C:\\Users\\volka\\Anaconda3\\lib\\site-packages\\numpy\\.libs',
 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
 'PROCESSOR_ARCHITECTURE': 'AMD64',
 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 142 Stepping 10, GenuineIntel',
 'PROCESSOR_LEVEL': '6',
 'PROCESSOR_REVISION': '8e0a',
 'PROGRAMDATA': 'C:\\ProgramData',
 'PROGRAMFILES': 'C:\\Program Files',
 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)',
 'PROGRAMW6432': 'C:\\Program Files',
 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules',
 'PUBLIC': 'C:\\Users\\Public',
 'SESSIONNAME': 'Console',
 'SYSTEMDRIVE': 'C:',
 'SYSTEMROOT': 'C:\\Windows',
 'TEMP': 'C:\\Users\\volka\\AppData\\Local\\Temp',
 'TMP': 'C:\\Users\\volka\\AppData\\Local\\Temp',
 'USERDOMAIN': 'YENILENOVO',
 'USERDOMAIN_ROAMINGPROFILE': 'YENILENOVO',
 'USERNAME': 'volka',
 'USERPROFILE': 'C:\\Users\\volka',
 'WINDIR': 'C:\\Windows',
 'CONDA_PREFIX': 'C:\\Users\\volka\\Anaconda3',
 'JPY_INTERRUPT_EVENT': '2692',
 'IPY_INTERRUPT_EVENT': '2692',
 'JPY_PARENT_PID': '2460',
 'TERM': 'xterm-color',
 'CLICOLOR': '1',
 'PAGER': 'cat',
 'GIT_PAGER': 'cat',
 'MPLBACKEND': 'module://ipykernel.pylab.backend_inline'}
In [138]:
print(dict(os.environ)["HOMEPATH"])
print(dict(os.environ)["USERNAME"])
\Users\volka
volka
In [139]:
os.path.expanduser('~')
Out[139]:
'C:\\Users\\volka'

random

In [19]:
import random
dizi=[3,5,8,3,2,1,9]
random.seed(1)
print(random.randint(2,48)) #2 ile 48 arasında
print(random.randrange(1,100,3))
print(random.choice(dizi))
print(random.choices(dizi,k=3)) #çektiğini geri koyar, sampledan farkı bu, o yüzden aynısı çıkabilir
print(random.random()) #0-1 arası
print(random.uniform(2,5)) #2-5 arası küsurlu sayı
print(random.sample(dizi,2)) #çektiğini geri koymaz, choicestan farkı bu
10
13
8
[3, 1, 3]
0.37961522332372777
2.6298644191144316
[3, 3]
In [141]:
#liste karıştırmak
random.shuffle(dizi)
dizi
Out[141]:
[8, 1, 2, 9, 3, 5, 3]

array

listin hemen hemen aynısı olup önemli bir farkı, içine sadece belli tipte eleman almasıdır. Bu yüzden memory performansı açısından liste göre daha iyidir.ancak list'ler daha hızlıdır. Ayrıca sayısal bir dizi kullanacaksanız numpy kullanmanızı tavsiye ederim. Bunun dışıdna çok büyük metinsel diziler oluşturacaksanız array kullanabilirsinz.

In [142]:
from array import array
import sys
arr=array('i',[1,2,3])
lst=[1,2,3]
print(sys.getsizeof(arr),sys.getsizeof(lst)) #arr'ın memory kullanımı daha düşüktür
76 88

collections

In [6]:
my_list = ["a","b","c","c","e","c","b","b","a"]
my_list.count("a")
Out[6]:
2
In [7]:
from collections import Counter

cn = Counter(my_list) #dictionary benzeri bir yapı. tüm dictionary metodları kullanılabilir
print(cn)
print(cn["a"]) #yukarda list ile yaptığımızın aynısı
Counter({'b': 3, 'c': 3, 'a': 2, 'e': 1})
2
In [144]:
str_ = "sen seni bil sen seni sen bilmezsen kendini"
cn = Counter(str_.split(' '))
cn
Out[144]:
Counter({'sen': 3, 'seni': 2, 'bil': 1, 'bilmezsen': 1, 'kendini': 1})
In [145]:
print(cn.most_common(2)) #en çok kullanılan 2 kelime
print(list(cn)) #key değerlerinin listeye çevrilmiş hali
print(dict(cn)) #key-value değerlerinin sözlüğe çevrilmiş hali
[('sen', 3), ('seni', 2)]
['sen', 'seni', 'bil', 'bilmezsen', 'kendini']
{'sen': 3, 'seni': 2, 'bil': 1, 'bilmezsen': 1, 'kendini': 1}
In [146]:
#OrderDict'e artık ihtiyaç yoktur. Python 3.7den itibaren de dictioanryye girilen sırayı korumaktadır
#aşağıdaki örnekten de görebiliyoruz
from collections import OrderedDict 
liste = ["a","c","c","a","b","a","a","b","c"]
cnt = Counter(liste)
od = OrderedDict(cnt.most_common())
d=dict(cnt.most_common())
for key, value in od.items():
    print(key, value)
print("----")
for key, value in d.items():
    print(key, value)
a 4
c 3
b 2
----
a 4
c 3
b 2
In [147]:
from collections import namedtuple

Student = namedtuple('Student', 'fname, lname, age') #class yapısına benzer bir kullanım. indeks ezberlemeye son!
s1 = Student('John', 'Clarke', '13')
print(s1.fname)
John

itertools

Permütasyon

In [148]:
from itertools import permutations #sadece tekrarsızlar yapılabiliyor. n!/(n-r)!
liste=["A","B","C"]
per1=list(permutations(liste))
per2=list(permutations(liste,2))
print(per1)
print(per2)
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

Kombinasyon

In [149]:
from itertools import combinations #n!/(r!*(n-r)!)
com=list(combinations(liste,2))
com
Out[149]:
[('A', 'B'), ('A', 'C'), ('B', 'C')]

Kartezyen çarpım

In [150]:
from itertools import product
list1=["A","B","C"]
list2=[2000,2001,2002,2003]
krt=list(product(list1,list2))
krt
Out[150]:
[('A', 2000),
 ('A', 2001),
 ('A', 2002),
 ('A', 2003),
 ('B', 2000),
 ('B', 2001),
 ('B', 2002),
 ('B', 2003),
 ('C', 2000),
 ('C', 2001),
 ('C', 2002),
 ('C', 2003)]

Regex (Düzenli ifadeler)

Pythona özgü değildir, hemen her dilde implementasyonu vardır. Başlı başına büyük bi konudur. Burada özet vermeye çalışıcam. İleride Text mining, NLP v.s çalışacaksanız iyi öğrenmenizde fayda var

Isınma

In [12]:
import re
In [153]:
a="benim adım volkan"
In [154]:
#match: başında var mı diye kontrol eder
re.match("volkan",a) #eşleşme yok, sonuç dönmez
In [155]:
re.match("ben",a) #var
Out[155]:
<re.Match object; span=(0, 3), match='ben'>
In [156]:
a.startswith("ben") #bu daha kullanışlıdır.
Out[156]:
True
In [157]:
#search, herhangi bi yerde var mı, matche göre daha yavaş çalışır
re.search("volkan",a)
Out[157]:
<re.Match object; span=(11, 17), match='volkan'>
In [158]:
"volkan" in a #bu daha pratik
Out[158]:
True
In [159]:
b="sen seni bil sen seni"
bul=re.findall("sen", b)

print(bul)
print(len(bul))
print(b.count("sen"))
['sen', 'sen', 'sen', 'sen']
4
4

Metakarakter kullanımı

In [13]:
isimler=["123a","ali","veli","hakan","volkan","osman","kandemir","VOLkan"]
In [14]:
#kan ile bitenler, regex olmadan
kan=[x for x in isimler if x[-3:]=="kan"]
kan
Out[14]:
['hakan', 'volkan', 'VOLkan']

image.png

[ ] Köşeli parantez

[] işareti, "içine giren karakterleri içeren" filtresi uygular. Burada önemli olan [] içinde gördügümüz tüm karaktereleri tek tek uyguluyor olmasıdır. Ör: [abc]: a veya b veya c içeren demek. [a-z]: A ile Z arasındakiler demek

In [15]:
#regex ile
for i in isimler:
    if re.search("[a-z]kan",i):
        print(i)
#başta veya ortada bir yerde a-z arasında bir karekter olsun, sonu kan olsun demiş olduk. yani "kan"ın önünde bir harf 
#olsun da nerede olursa olsun, bşta mı ortada mı önemli değil, önemli olan kan'ın öncesinde olmaslı
hakan
volkan
In [163]:
#içinde e veya m geçenler, bu sefer list comprehension ile yapalım
[i for i in isimler if re.search("[em]",i)]
Out[163]:
['veli', 'osman', 'kandemir']
In [164]:
#rakam içerenler
liste = ["123a","b123","1234","volkan"]
sayıiçerenler=[x for x in liste if re.search("[0-9]",x)]
sayıiçerenler
Out[164]:
['123a', 'b123', '1234']
In [165]:
#rakam ile başlayanları bulma
rakamlabaşlayanlar=[x for x in liste if re.match("[0-9]",x)] #yukardakinden farklı olarak match kullandık, daha hızlı çalışır
rakamlabaşlayanlar
Out[165]:
['123a', '1234']
In [166]:
liste=["ABC","Abc","abc","12a","A12","123","Ab1","Ab23"]
print([x for x in liste if re.search("[A-Za-z]",x)]) #büyük veya küçük harf içerenler
print([x for x in liste if re.search("[A-Z][a-z]",x)]) #ilki büyük ikincisi küçük harf içerenler
print([x for x in liste if re.search("[A-Za-z0-9]",x)]) #büyük veya küçük harf veya sayı içerenler
print([x for x in liste if re.search("[A-Z][a-z][0-9]",x)]) #ilki büyük ikincisi küçük üçüncüsü sayı olanlar
['ABC', 'Abc', 'abc', '12a', 'A12', 'Ab1', 'Ab23']
['Abc', 'Ab1', 'Ab23']
['ABC', 'Abc', 'abc', '12a', 'A12', '123', 'Ab1', 'Ab23']
['Ab1', 'Ab23']

. Nokta

"." tek karekteri için joker anlamındadır

In [167]:
isimler=["arhan","volkan","osman","hakan","demirhan","1ozan"]
In [168]:
#5 karekterli olup an ile biten gerçek isimler(gerçek isim: sayı ile başlayan birşey isim olamaz)
liste=[x for x in isimler if re.match("[a-z]..an",x)]
liste
Out[168]:
['arhan', 'osman', 'hakan']

* Yıldız

Kendinden önce gelen 1 ifadeyi en az 0(evet 0, 1 değil) sayıda eşleştirir. Özellikle bir ifadenin yazılamayabildiği durumları da kapsamak için kullanılır. Aşağıdkai örnek gayet açıklayıcıdır.

In [169]:
liste = ["kıral", "kral", "kıro", "kro", "kırmızı","kırçıllı","kritik","kıritik","kııral"]
[x for x in liste if re.match("kı*r[aeıioöuü]",x)]
Out[169]:
['kıral', 'kral', 'kıro', 'kro', 'kritik', 'kıritik', 'kııral']

Bu örnekte, yabancı dilden geçen kelimelerden "kr" ile başlayanları inceledik. Bunlar bazen aralarına ı harfi girilerek yazılabiliyor. Bu kelimelerde genelde r'den sonra sesli bi harf gelir. Biz de bunları yakalamaya çalıştık.

+ Artı

Yıldıza benzer, ancak bu sefer en az 1 sayıda eşleşme yapar.

In [170]:
liste = ["kıral", "kral", "kıro", "kro", "kırmızı","kırçıllı","kritik","kıritik","kııral"]
[x for x in liste if re.match("kı+r[aeıioöuü]",x)]
Out[170]:
['kıral', 'kıro', 'kıritik', 'kııral']
In [17]:
#yukardaki kan'la biten isimler örneğin. bu sefer VOLkan yazdırılır
for i in isimler:
    if re.search(".+kan",i):
        print(i)
hakan
volkan
VOLkan

? Soru işareti

Kendinden önce gelen karakterin 0 veya 1 kez geçtiği durumları eşleştirir.

In [171]:
liste = ["kıral", "kral", "kıro", "kro", "kırmızı","kırçıllı","kritik","kıritik","kııral"]
[x for x in liste if re.match("kı?r[aeıioöuü]",x)]
Out[171]:
['kıral', 'kral', 'kıro', 'kro', 'kritik', 'kıritik']

{} süslü parantez

bir karekterin n adet geçtiği durumlar eşleştirilir.

In [172]:
liste = ["kıral", "kral", "kıro", "kro", "kırmızı","kırçıllı","kritik","kıritik","kııral"]
[x for x in liste if re.match("kı{2}r[aeıioöuü]",x)]
Out[172]:
['kııral']
In [173]:
#böyle de yapılabilirdi ama n sayısı yükseldikçe {} ile yapmak daha mantıklı
[x for x in liste if re.match("kıır[aeıioöuü]",x)]
Out[173]:
['kııral']
In [174]:
#{min,max}
liste=["gol","gool","gooool","gööl","gooooooool"]
[x for x in liste if re.match("[a-z]o{2,5}l",x)] #en az 2 en çok 5 oo içersin
Out[174]:
['gool', 'gooool']
Çeşitli linkler

Regex dünyası çok büyük bi dünya, burada hepsini anlatmak yerine kısa bir girizgah yapmış olduk. Öncelikle genel oalrak regexi kavramanız sonrasında da python implementasonunu kavramanız gerekiyor. Aşağıdaki linkleri incelemenizi tavisye ederim.

Genel bilgi

Python

json

jsondan pythona

json yapısı python dictionary'lerine çok benzer. elde edeceğimiz nesne de bir dictionary olacaktır

In [1]:
import json
In [2]:
#örnek bir json stringden
x =  '{ "name":"John", "age":30, "city":"New York"}'
y=json.loads(x) #dcitionary olarak yükler
type(x)
type(y)
y["name"]
Out[2]:
'John'
In [6]:
#veya json dosyadan. ama bu indenti dikkate almıyor, çünkü elde edilen nesne bi string değil, dictioanry
with open(r"E:\OneDrive\Dökümanlar\GitHub\dataset\json\indentli_bolgesatis.json", mode='r') as f:
    data = json.load(f)
type(data)
data    
Out[6]:
dict
Out[6]:
{'Bolge': {'0': 'Akdeniz', '1': 'Marmara', '2': 'Akdeniz', '3': 'Marmara'},
 'Yil': {'0': 2020, '1': 2020, '2': 2021, '3': 2021},
 'Satis': {'0': 10, '1': 15, '2': 42, '3': 56}}
In [8]:
#indentli formatı yazdırmak istersek dosya okuması yaparak bi string içine okuruz
with open(r"E:\OneDrive\Dökümanlar\GitHub\dataset\json\indentli_bolgesatis.json", mode='r') as f:
    content=f.read()    # bu stringdir, ve indentli yapı korunmuştur
print(content)
{
    "Bolge":{
        "0":"Akdeniz",
        "1":"Marmara",
        "2":"Akdeniz",
        "3":"Marmara"
    },
    "Yil":{
        "0":2020,
        "1":2020,
        "2":2021,
        "3":2021
    },
    "Satis":{
        "0":10,
        "1":15,
        "2":42,
        "3":56
    }
}
In [9]:
#split oriented kaydedilmiş dosyadan
with io.open(r"E:\OneDrive\Dökümanlar\GitHub\dataset\json\indentli_bolgesatis_split.json", mode='r') as f:
    content=f.read()    
print(content)
{
    "columns":[
        "Bolge",
        "Yil",
        "Satis"
    ],
    "data":[
        [
            "Akdeniz",
            2020,
            10
        ],
        [
            "Marmara",
            2020,
            15
        ],
        [
            "Akdeniz",
            2021,
            42
        ],
        [
            "Marmara",
            2021,
            56
        ]
    ]
}
In [11]:
#table oriented kaydedilmiş dosyadan
with open(r"E:\OneDrive\Dökümanlar\GitHub\dataset\json\indentli_bolgesatis_table.json", mode='r') as f:
    content=f.read()    
print(content)
{
    "schema":{
        "fields":[
            {
                "name":"Bolge",
                "type":"string"
            },
            {
                "name":"Yil",
                "type":"integer"
            },
            {
                "name":"Satis",
                "type":"integer"
            }
        ],
        "pandas_version":"0.20.0"
    },
    "data":[
        {
            "Bolge":"Akdeniz",
            "Yil":2020,
            "Satis":10
        },
        {
            "Bolge":"Marmara",
            "Yil":2020,
            "Satis":15
        },
        {
            "Bolge":"Akdeniz",
            "Yil":2021,
            "Satis":42
        },
        {
            "Bolge":"Marmara",
            "Yil":2021,
            "Satis":56
        }
    ]
}
In [12]:
c=json.loads(content)
type(c)
c
Out[12]:
dict
Out[12]:
{'schema': {'fields': [{'name': 'Bolge', 'type': 'string'},
   {'name': 'Yil', 'type': 'integer'},
   {'name': 'Satis', 'type': 'integer'}],
  'pandas_version': '0.20.0'},
 'data': [{'Bolge': 'Akdeniz', 'Yil': 2020, 'Satis': 10},
  {'Bolge': 'Marmara', 'Yil': 2020, 'Satis': 15},
  {'Bolge': 'Akdeniz', 'Yil': 2021, 'Satis': 42},
  {'Bolge': 'Marmara', 'Yil': 2021, 'Satis': 56}]}
In [13]:
#içteki tek bir bilgiye ulaşma
c["data"][0]["Bolge"] #dict of list of dict
Out[13]:
'Akdeniz'
In [14]:
#tüm bölgeleri alma
for l in c["data"]:
    print(l["Bolge"])
Akdeniz
Marmara
Akdeniz
Marmara

pythondan jsona

In [21]:
x = {
  "name": "John",
  "age": 30,
  "city": "New York"
}

j = json.dumps(x)
type(x)
type(j)
j
Out[21]:
dict
Out[21]:
str
Out[21]:
'{"name": "John", "age": 30, "city": "New York"}'
In [30]:
#komplike(nested) json
x = {
  "name": "John",
  "age": 30,
  "married": True,
  "divorced": False,
  "children": ("Ann","Billy"),
  "pets": None,
  "cars": [
    {"model": "BMW 230", "mpg": 27.5},
    {"model": "Ford Edge", "mpg": 24.1}
  ]
}

print(json.dumps(x))
{"name": "John", "age": 30, "married": true, "divorced": false, "children": ["Ann", "Billy"], "pets": null, "cars": [{"model": "BMW 230", "mpg": 27.5}, {"model": "Ford Edge", "mpg": 24.1}]}
In [31]:
#bu da şık hali
print(json.dumps(x,indent=4))
{
    "name": "John",
    "age": 30,
    "married": true,
    "divorced": false,
    "children": [
        "Ann",
        "Billy"
    ],
    "pets": null,
    "cars": [
        {
            "model": "BMW 230",
            "mpg": 27.5
        },
        {
            "model": "Ford Edge",
            "mpg": 24.1
        }
    ]
}
In [24]:
print(json.dumps(x,indent=4,sort_keys=True))
{
    "age": 30,
    "cars": [
        {
            "model": "BMW 230",
            "mpg": 27.5
        },
        {
            "model": "Ford Edge",
            "mpg": 24.1
        }
    ],
    "children": [
        "Ann",
        "Billy"
    ],
    "divorced": false,
    "married": true,
    "name": "John",
    "pets": null
}

Bunları aşağıdaki I/O işlemleriyle bir dosyaya da yazdırabilirsiniz.

Request

https://realpython.com/python-requests/ sitesinden faydalandım

Basics

In [17]:
import requests
In [18]:
httpget0=r"https://www.excelinefendisi.com/httpapiservice/ResponseveRequestTarget.aspx" #buna parametre verebiliyoruz, Anakonu=VBAMakro, Altkonu=Temeller
httpget0j=r"https://www.excelinefendisi.com/httpapiservice/ReturnJson.aspx" #tüm duyurlar as json
httpget1=r"http://ptsv2.com/t/trump/d/1"
httpget1json=r"http://ptsv2.com/t/trump/d/1/json"
httpget1txt=r"http://ptsv2.com/t/trump/d/1/text"
httpget2_auth=r"http://ptsv2.com/t/volkitolki/post" #sırayla volki, tolki
httpget3=r"https://httpbin.org/get" #as json
httpget4img=r"https://httpbin.org/image"
httpget5=r"https://www.google.com/search?q=excel&oq=excel&aqs=chrome..69i57j35i39l2j0i433l4j46i433l2j0.839j0j15&sourceid=chrome&ie=UTF-8"
httpget6githubjson=r"https://raw.githubusercontent.com/VolkiTheDreamer/dataset/master/json/bolgesatis.json"
getlist=[httpget0,httpget0j,httpget1,httpget1json,httpget1txt,httpget2_auth,httpget3,httpget4img,httpget5]

httppost1=r"http://ptsv2.com/t/trump/d/20001"
httppost2=r"http://ptsv2.com/t/trump/post"
httppost3=r"https://httpbin.org/post"
httppos4=r"benimsitedekileri daha sonra ekle"
In [19]:
r=requests.get(httpget3)
In [20]:
r.headers
Out[20]:
{'Date': 'Sat, 15 May 2021 15:34:28 GMT', 'Content-Type': 'application/json', 'Content-Length': '306', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}
In [21]:
requests.get('http://volkanyurtseven.com')
Out[21]:
<Response [200]>
In [4]:
requests.get('https://volkanyurtseven.com') #https versiyonu yok, hata alcaz
---------------------------------------------------------------------------
SSLCertVerificationError                  Traceback (most recent call last)
c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    669             # Make the request on the httplib connection object.
--> 670             httplib_response = self._make_request(
    671                 conn,

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\urllib3\connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    380         try:
--> 381             self._validate_conn(conn)
    382         except (SocketTimeout, BaseSSLError) as e:

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\urllib3\connectionpool.py in _validate_conn(self, conn)
    977         if not getattr(conn, "sock", None):  # AppEngine might not have  `.sock`
--> 978             conn.connect()
    979 

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\urllib3\connection.py in connect(self)
    396                 )
--> 397             _match_hostname(cert, self.assert_hostname or server_hostname)
    398 

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\urllib3\connection.py in _match_hostname(cert, asserted_hostname)
    406     try:
--> 407         match_hostname(cert, asserted_hostname)
    408     except CertificateError as e:

c:\users\volka\appdata\local\programs\python\python38\lib\ssl.py in match_hostname(cert, hostname)
    415     if len(dnsnames) > 1:
--> 416         raise CertificateError("hostname %r "
    417             "doesn't match either of %s"

SSLCertVerificationError: ("hostname 'volkanyurtseven.com' doesn't match either of 'milyaplastic.com', 'www.milyaplastic.com'",)

During handling of the above exception, another exception occurred:

MaxRetryError                             Traceback (most recent call last)
c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\requests\adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    438             if not chunked:
--> 439                 resp = conn.urlopen(
    440                     method=request.method,

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    725 
--> 726             retries = retries.increment(
    727                 method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\urllib3\util\retry.py in increment(self, method, url, response, error, _pool, _stacktrace)
    438         if new_retry.is_exhausted():
--> 439             raise MaxRetryError(_pool, url, error or ResponseError(cause))
    440 

MaxRetryError: HTTPSConnectionPool(host='volkanyurtseven.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError("hostname 'volkanyurtseven.com' doesn't match either of 'milyaplastic.com', 'www.milyaplastic.com'")))

During handling of the above exception, another exception occurred:

SSLError                                  Traceback (most recent call last)
<ipython-input-4-c16172f74e34> in <module>
----> 1 requests.get('https://volkanyurtseven.com') #https versiyonu yok, hata alcaz

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\requests\api.py in get(url, params, **kwargs)
     74 
     75     kwargs.setdefault('allow_redirects', True)
---> 76     return request('get', url, params=params, **kwargs)
     77 
     78 

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\requests\api.py in request(method, url, **kwargs)
     59     # cases, and look like a memory leak in others.
     60     with sessions.Session() as session:
---> 61         return session.request(method=method, url=url, **kwargs)
     62 
     63 

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\requests\sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    528         }
    529         send_kwargs.update(settings)
--> 530         resp = self.send(prep, **send_kwargs)
    531 
    532         return resp

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\requests\sessions.py in send(self, request, **kwargs)
    641 
    642         # Send the request
--> 643         r = adapter.send(request, **kwargs)
    644 
    645         # Total elapsed time of the request (approximately)

c:\users\volka\appdata\local\programs\python\python38\lib\site-packages\requests\adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    512             if isinstance(e.reason, _SSLError):
    513                 # This branch is for urllib3 v1.22 and later.
--> 514                 raise SSLError(e, request=request)
    515 
    516             raise ConnectionError(e, request=request)

SSLError: HTTPSConnectionPool(host='volkanyurtseven.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError("hostname 'volkanyurtseven.com' doesn't match either of 'milyaplastic.com', 'www.milyaplastic.com'")))
In [5]:
requests.get('http://volkanyurtseven.com/olmayansayfa') #bu sefer site doğru ama bahsekonu sayfa yoksa 404
Out[5]:
<Response [404]>
In [6]:
response = requests.get('http://volkanyurtseven.com')
response.status_code
Out[6]:
200
In [29]:
response = requests.get(httpget1)
response.content #byte olarak
Out[29]:
b'<!DOCTYPE html>\r\n<html lang="en">\r\n  <head>\r\n    <meta charset="utf-8">\r\n    <meta http-equiv="X-UA-Compatible" content="IE=edge">\r\n    <meta name="viewport" content="width=device-width, initial-scale=1">\r\n    <title>PTS - V2</title>\r\n\r\n    <link href="/static/bootstrap/css/bootstrap.css" rel="stylesheet">\r\n    <link href="/static/style.css" rel="stylesheet">\r\n\r\n    \r\n    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-1152810-4"></script>\r\n    <script>\r\n        window.dataLayer = window.dataLayer || [];\r\n        function gtag(){dataLayer.push(arguments);}\r\n        gtag(\'js\', new Date());\r\n\r\n        gtag(\'config\', \'UA-1152810-4\');\r\n    </script>\r\n  </head>\r\n\r\n  <body>\r\n    <div class="container">\r\n        \r\n        <div class="row" style="background-color:darkgrey">\r\n            <div class="col-xs-12">\r\n                <h1>Dump View</h1>\r\n            </div>\r\n        </div>\r\n\r\n        \r\n        <div class="row">\r\n            \r\n            <div class="col-xs-2">\r\n                <a href="/"><img src="/static/ToiletLogo.jpg" style="margin-top: 5px;margin-bottom:5px"  /></a><br/>\r\n<a href="/s/whatisthis.html">What is this?</a><br/>\r\n<a href="/s/somerules.html">Some Rules</a><br/>\r\n<a href="/s/howitworks.html">How it works</a><br/>\r\n<a href="/s/dumpfields.html">What\'s in a dump</a><br/>\r\n<a href="/s/contact.html">Contact</a><br/>\r\n            </div>\r\n\r\n            <div class="col-xs-10">\r\n              <div class="row">\r\n                <div class="col-xs-12">\r\n\r\n\r\n<script\r\nsrc="https://code.jquery.com/jquery-3.2.1.min.js"\r\nintegrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="\r\ncrossorigin="anonymous"></script>\r\n\r\n            <h2>Dump 1</h2>\r\n            <a href="/t/trump">Parent Toilet</a><br/>\r\n            View this as: <a href="/t/trump/d/1/json">json</a> or <a href="/t/trump/d/1/text">raw text</a><br/>\r\n            See <a href="/s/dumpfields.html">what\'s in a dump</a> for info on how these fields are populated.<br/>\r\n\r\n            <h3>Details</h3>\r\n            <strong>Posted:</strong> 2018-05-17 16:55:50 UTC</br>\r\n            <strong>Method:</strong> GET<br/>\r\n            <strong>Source:</strong> 177.23.244.132<br/>\r\n\r\n            <h3>Headers</h3>\r\n            <table class="table table-super-condensed table-borderless table-hover">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Header</th>\r\n                        <th>Values</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                \r\n                    <tr>\r\n                        <td>Accept</td>\r\n                        <td>\r\n                                \r\n                                text/html,application/xhtml&#43;xml,application/xml;q=0.9,*/*;q=0.8 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Accept-Language</td>\r\n                        <td>\r\n                                \r\n                                en-GB,en;q=0.5 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Host</td>\r\n                        <td>\r\n                                \r\n                                ptsv2.com \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Referer</td>\r\n                        <td>\r\n                                \r\n                                http://ptsv2.com/t/trump \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Upgrade-Insecure-Requests</td>\r\n                        <td>\r\n                                \r\n                                1 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>User-Agent</td>\r\n                        <td>\r\n                                \r\n                                Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>X-Cloud-Trace-Context</td>\r\n                        <td>\r\n                                \r\n                                7a8644a414c1c3d2b54c9c795d1bdcc1/5295215977831438294 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>X-Google-Apps-Metadata</td>\r\n                        <td>\r\n                                \r\n                                domain=gmail.com,host=ptsv2.com \r\n                            </td>\r\n                    </tr>\r\n                \r\n                </tbody>\r\n            </table>\r\n\r\n            <h3>Parameters</h3>\r\n            \r\n              No Parameters.\r\n            \r\n\r\n            <h3>Post Body</h3>\r\n            \r\n                No Body.\r\n            \r\n\r\n            <h3>Multipart Files</h3>\r\n            \r\n                No Files\r\n            \r\n\r\n            <h3>Multipart Values</h3>\r\n            \r\n                No Multipart Values\r\n            \r\n\r\n<script type="text/javascript">\r\n  $(".showFileString").click(function() {\r\n    $(this).closest("tr").next().toggle();\r\n  });\r\n\r\n  $(".showFileBytes").click(function() {\r\n    $(this).closest("tr").next().next().toggle();\r\n  });\r\n</script>\r\n\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n\r\n        </div>\r\n    </div>\r\n</body>\r\n</html> '
In [30]:
response.text #string olarak
Out[30]:
'<!DOCTYPE html>\r\n<html lang="en">\r\n  <head>\r\n    <meta charset="utf-8">\r\n    <meta http-equiv="X-UA-Compatible" content="IE=edge">\r\n    <meta name="viewport" content="width=device-width, initial-scale=1">\r\n    <title>PTS - V2</title>\r\n\r\n    <link href="/static/bootstrap/css/bootstrap.css" rel="stylesheet">\r\n    <link href="/static/style.css" rel="stylesheet">\r\n\r\n    \r\n    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-1152810-4"></script>\r\n    <script>\r\n        window.dataLayer = window.dataLayer || [];\r\n        function gtag(){dataLayer.push(arguments);}\r\n        gtag(\'js\', new Date());\r\n\r\n        gtag(\'config\', \'UA-1152810-4\');\r\n    </script>\r\n  </head>\r\n\r\n  <body>\r\n    <div class="container">\r\n        \r\n        <div class="row" style="background-color:darkgrey">\r\n            <div class="col-xs-12">\r\n                <h1>Dump View</h1>\r\n            </div>\r\n        </div>\r\n\r\n        \r\n        <div class="row">\r\n            \r\n            <div class="col-xs-2">\r\n                <a href="/"><img src="/static/ToiletLogo.jpg" style="margin-top: 5px;margin-bottom:5px"  /></a><br/>\r\n<a href="/s/whatisthis.html">What is this?</a><br/>\r\n<a href="/s/somerules.html">Some Rules</a><br/>\r\n<a href="/s/howitworks.html">How it works</a><br/>\r\n<a href="/s/dumpfields.html">What\'s in a dump</a><br/>\r\n<a href="/s/contact.html">Contact</a><br/>\r\n            </div>\r\n\r\n            <div class="col-xs-10">\r\n              <div class="row">\r\n                <div class="col-xs-12">\r\n\r\n\r\n<script\r\nsrc="https://code.jquery.com/jquery-3.2.1.min.js"\r\nintegrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="\r\ncrossorigin="anonymous"></script>\r\n\r\n            <h2>Dump 1</h2>\r\n            <a href="/t/trump">Parent Toilet</a><br/>\r\n            View this as: <a href="/t/trump/d/1/json">json</a> or <a href="/t/trump/d/1/text">raw text</a><br/>\r\n            See <a href="/s/dumpfields.html">what\'s in a dump</a> for info on how these fields are populated.<br/>\r\n\r\n            <h3>Details</h3>\r\n            <strong>Posted:</strong> 2018-05-17 16:55:50 UTC</br>\r\n            <strong>Method:</strong> GET<br/>\r\n            <strong>Source:</strong> 177.23.244.132<br/>\r\n\r\n            <h3>Headers</h3>\r\n            <table class="table table-super-condensed table-borderless table-hover">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Header</th>\r\n                        <th>Values</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                \r\n                    <tr>\r\n                        <td>Accept</td>\r\n                        <td>\r\n                                \r\n                                text/html,application/xhtml&#43;xml,application/xml;q=0.9,*/*;q=0.8 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Accept-Language</td>\r\n                        <td>\r\n                                \r\n                                en-GB,en;q=0.5 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Host</td>\r\n                        <td>\r\n                                \r\n                                ptsv2.com \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Referer</td>\r\n                        <td>\r\n                                \r\n                                http://ptsv2.com/t/trump \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>Upgrade-Insecure-Requests</td>\r\n                        <td>\r\n                                \r\n                                1 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>User-Agent</td>\r\n                        <td>\r\n                                \r\n                                Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>X-Cloud-Trace-Context</td>\r\n                        <td>\r\n                                \r\n                                7a8644a414c1c3d2b54c9c795d1bdcc1/5295215977831438294 \r\n                            </td>\r\n                    </tr>\r\n                \r\n                    <tr>\r\n                        <td>X-Google-Apps-Metadata</td>\r\n                        <td>\r\n                                \r\n                                domain=gmail.com,host=ptsv2.com \r\n                            </td>\r\n                    </tr>\r\n                \r\n                </tbody>\r\n            </table>\r\n\r\n            <h3>Parameters</h3>\r\n            \r\n              No Parameters.\r\n            \r\n\r\n            <h3>Post Body</h3>\r\n            \r\n                No Body.\r\n            \r\n\r\n            <h3>Multipart Files</h3>\r\n            \r\n                No Files\r\n            \r\n\r\n            <h3>Multipart Values</h3>\r\n            \r\n                No Multipart Values\r\n            \r\n\r\n<script type="text/javascript">\r\n  $(".showFileString").click(function() {\r\n    $(this).closest("tr").next().toggle();\r\n  });\r\n\r\n  $(".showFileBytes").click(function() {\r\n    $(this).closest("tr").next().next().toggle();\r\n  });\r\n</script>\r\n\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n\r\n        </div>\r\n    </div>\r\n</body>\r\n</html> '
In [31]:
response.raw
Out[31]:
<urllib3.response.HTTPResponse at 0x278e5c80760>

Böyle çok karışık oldu, bunu json olarak okuyalım. ama tabi önce bunun son versiyonuna tekrar bi get atalım.

In [34]:
#hala biraz okunaklı değil gibi
response = requests.get(httpget1json)
response.text
Out[34]:
'{"Timestamp":"2018-05-17T16:55:50.865299Z","Method":"GET","RemoteAddr":"177.23.244.132","ID":1,"Headers":{"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"],"Accept-Language":["en-GB,en;q=0.5"],"Host":["ptsv2.com"],"Referer":["http://ptsv2.com/t/trump"],"Upgrade-Insecure-Requests":["1"],"User-Agent":["Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"],"X-Cloud-Trace-Context":["7a8644a414c1c3d2b54c9c795d1bdcc1/5295215977831438294"],"X-Google-Apps-Metadata":["domain=gmail.com,host=ptsv2.com"]},"FormValues":{},"Body":"","Files":null,"MultipartValues":null}'
In [33]:
json.loads(response.text)
Out[33]:
{'Timestamp': '2018-05-17T16:55:50.865299Z',
 'Method': 'GET',
 'RemoteAddr': '177.23.244.132',
 'ID': 1,
 'Headers': {'Accept': ['text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'],
  'Accept-Language': ['en-GB,en;q=0.5'],
  'Host': ['ptsv2.com'],
  'Referer': ['http://ptsv2.com/t/trump'],
  'Upgrade-Insecure-Requests': ['1'],
  'User-Agent': ['Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0'],
  'X-Cloud-Trace-Context': ['7a8644a414c1c3d2b54c9c795d1bdcc1/5295215977831438294'],
  'X-Google-Apps-Metadata': ['domain=gmail.com,host=ptsv2.com']},
 'FormValues': {},
 'Body': '',
 'Files': None,
 'MultipartValues': None}
In [28]:
#veya responseun json metopdunu kullanabiliriz
response.json()
Out[28]:
{'Timestamp': '2018-05-17T16:55:50.865299Z',
 'Method': 'GET',
 'RemoteAddr': '177.23.244.132',
 'ID': 1,
 'Headers': {'Accept': ['text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'],
  'Accept-Language': ['en-GB,en;q=0.5'],
  'Host': ['ptsv2.com'],
  'Referer': ['http://ptsv2.com/t/trump'],
  'Upgrade-Insecure-Requests': ['1'],
  'User-Agent': ['Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0'],
  'X-Cloud-Trace-Context': ['7a8644a414c1c3d2b54c9c795d1bdcc1/5295215977831438294'],
  'X-Google-Apps-Metadata': ['domain=gmail.com,host=ptsv2.com']},
 'FormValues': {},
 'Body': '',
 'Files': None,
 'MultipartValues': None}

It should be noted that the success of the call to r.json() does not indicate the success of the response. Some servers may return a JSON object in a failed response (e.g. error details with HTTP 500). Such JSON will be decoded and returned. To check that a request is successful, use r.raise_for_status() or check r.status_code is what you expect.

In [35]:
response.raise_for_status()
response.status_code
Out[35]:
200
In [36]:
dict(response.headers)
Out[36]:
{'Content-Type': 'application/json',
 'Vary': 'Accept-Encoding',
 'Content-Encoding': 'gzip',
 'X-Cloud-Trace-Context': '5af5d5bd00d8797062a003642f0c310e',
 'Date': 'Mon, 12 Apr 2021 11:50:43 GMT',
 'Server': 'Google Frontend',
 'Cache-Control': 'private',
 'Content-Length': '463'}
In [37]:
response.headers['Content-Type']
Out[37]:
'application/json'

QueryString parameters

In [38]:
# Search GitHub's repositories for requests
response = requests.get(
    'https://api.github.com/search/repositories',
    params={'q': 'requests+language:python'},
)

# Inspect some attributes of the `requests` repository
json_response = response.json()
repository = json_response['items'][0]
print(f'Repository name: {repository["name"]}')  # Python 3.6+
print(f'Repository description: {repository["description"]}')  # Python 3.6+
print(response.url)
Repository name: grequests
Repository description: Requests + Gevent = <3
https://api.github.com/search/repositories?q=requests%2Blanguage%3Apython
In [39]:
response = requests.get(
    'https://www.excelinefendisi.com/httpapiservice/ResponseveRequestTarget.aspx',
    params={'Anakonu':'VBAMakro', 'Altkonu':'Temeller'},
)

print(response.url)
https://www.excelinefendisi.com/httpapiservice/ResponseveRequestTarget.aspx?Anakonu=VBAMakro&Altkonu=Temeller
In [79]:
response.text
Out[79]:
'root dizin : www.excelinefendisi.com<br/>sonraki dizin : /httpapiservice/ResponseveRequestTarget.aspx<br/>Full adres : https://www.excelinefendisi.com/httpapiservice/ResponseveRequestTarget.aspx?Anakonu=VBAMakro&Altkonu=Temeller<br/>Portlu Full adres : https://www.excelinefendisi.com:443/httpapiservice/ResponseveRequestTarget.aspx?Anakonu=VBAMakro&Altkonu=Temeller<br/>Portu : 443<br/>Query :?Anakonu=VBAMakro&Altkonu=Temeller<br/>http : https<br/>\r\n\r\n<!DOCTYPE html>\r\n\r\n<html xmlns="http://www.w3.org/1999/xhtml">\r\n<head><title>\r\n\r\n</title></head>\r\n<body>\r\n    <form method="post" action="./ResponseveRequestTarget.aspx?Anakonu=VBAMakro&amp;Altkonu=Temeller" id="form1">\r\n<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTcwMzM5MjQwNA9kFgICAw9kFgYCBQ8PFgIeBFRleHQFCS1UZW1lbGxlcmRkAgcPDxYCHwAFSFZCQU1ha3JvIGFuYWtvdXN1IHZlIFRlbWVsbGVyICBhbHRrb251c3UgYWx0xLFuZGEgdG9wbGFtIDUgYWRldCBrb251IHZhcmRkAgkPPCsAEQEMFCsAAGQYAQUJR3JpZFZpZXcxD2dkywy549BubCfpJAwEn23IJlD4fo2ip+XWVPRemG9/c8Y=" />\r\n\r\n<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="BD530E7E" />\r\n        <div>\r\n            <h2>Genel bilgier</h2>\r\n            <span id="lblPostBackUrlMesaj">Label</span>  <br /><br />\r\n            <span id="lblServerTransfer">Label</span><br /><br />\r\n            <span id="lblHtml">-Temeller</span><br /><br />\r\n        </div>\r\n        <div>\r\n            <h2>Data bölgesi</h2>\r\n            <span id="lblAnakonuAltkonu">VBAMakro anakousu ve Temeller  altkonusu altında toplam 5 adet konu var</span>\r\n            <br />\r\n            <div>\r\n\r\n</div>\r\n        </div>\r\n    </form>\r\n</body>\r\n</html>\r\n'
In [67]:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('https://httpbin.org/get', params=payload)

Headers

In [70]:
r.headers
Out[70]:
{'Date': 'Sun, 11 Apr 2021 11:48:29 GMT', 'Content-Type': 'application/json', 'Content-Length': '377', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}
In [83]:
#custimize header
response = requests.get(
    'https://api.github.com/search/repositories',
    params={'q': 'requests+language:python'},
    headers={'Accept': 'application/vnd.github.v3.text-match+json'},
)

# View the new `text-matches` array which provides information
# about your search term within the results
json_response = response.json()
repository = json_response['items'][0]
print(f'Text matches: {repository["text_matches"]}')
Text matches: [{'object_url': 'https://api.github.com/repositories/4290214', 'object_type': 'Repository', 'property': 'description', 'fragment': 'Requests + Gevent = <3', 'matches': [{'text': 'Requests', 'indices': [0, 8]}]}]
In [86]:
requests.post('https://httpbin.org/post', data={'key':'value'})
requests.put('https://httpbin.org/put', data={'key':'value'})
requests.delete('https://httpbin.org/delete')
requests.head('https://httpbin.org/get')
requests.patch('https://httpbin.org/patch', data={'key':'value'})
requests.options('https://httpbin.org/get')
Out[86]:
<Response [200]>
Out[86]:
<Response [200]>
Out[86]:
<Response [200]>
Out[86]:
<Response [200]>
Out[86]:
<Response [200]>
Out[86]:
<Response [200]>
In [89]:
response = requests.head('https://httpbin.org/get')
response.headers['Content-Type']
Out[89]:
'application/json'
In [90]:
response = requests.delete('https://httpbin.org/delete')
json_response = response.json()
json_response['args']
Out[90]:
{}
In [ ]:
 

According to the HTTP specification, POST, PUT, and the less common PATCH requests pass their data through the message body rather than through parameters in the query string.

In [94]:
requests.post('https://httpbin.org/post', data={'key':'value'}) #veya data=[('key', 'value')]
Out[94]:
<Response [200]>
In [95]:
>>> response = requests.post('https://httpbin.org/post', json={'key':'value'})
>>> json_response = response.json()
>>> json_response['data']
'{"key": "value"}'
>>> json_response['headers']['Content-Type']
'application/json'
Out[95]:
'{"key": "value"}'
Out[95]:
'{"key": "value"}'
Out[95]:
'application/json'
Out[95]:
'application/json'
In [96]:
>>> response = requests.post('https://httpbin.org/post', json={'key':'value'})
>>> response.request.headers['Content-Type']
'application/json'
>>> response.request.url
'https://httpbin.org/post'
>>> response.request.body
b'{"key": "value"}'
Out[96]:
'application/json'
Out[96]:
'application/json'
Out[96]:
'https://httpbin.org/post'
Out[96]:
'https://httpbin.org/post'
Out[96]:
b'{"key": "value"}'
Out[96]:
b'{"key": "value"}'
In [98]:
response.url
response.headers
response.request.url
response.request.headers
Out[98]:
'https://httpbin.org/post'
Out[98]:
{'Date': 'Sun, 11 Apr 2021 15:43:12 GMT', 'Content-Type': 'application/json', 'Content-Length': '480', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}
Out[98]:
'https://httpbin.org/post'
Out[98]:
{'User-Agent': 'python-requests/2.24.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '16', 'Content-Type': 'application/json'}
In [101]:
#authhentication
>>> from getpass import getpass
>>> requests.get('https://api.github.com/user', auth=('username', getpass()))
········
Out[101]:
<Response [401]>

webserive

BeautifulSoup

In [22]:
URL = 'https://www.monster.com/jobs/search/?q=Software-Developer&where=Australia'
page = requests.get(URL)
In [23]:
import requests
from bs4 import BeautifulSoup

URL = 'https://www.excelinefendisi.com/Konular/Excel/Giris_PratikKisayollar.aspx'
page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')
In [24]:
results = soup.find_all(class_='alterantelitable')
for r in results:    
    print(r, end='\n'*2)
<table class="alterantelitable">
<th>Amaç</th>
<th>Kısayol</th>
<tr>
<td>Sayfalar arasında dolaşmak</td>
<td>CTRL + PgUp/PgDn</td>
</tr>
<tr>
<td>Bugünün Tarihini yazmak</td>
<td>CTRL + SHIFT +, </td>
</tr>
<tr>
<td>Tüm açık dosyalarda calculation yapmak</td>
<td>F9</td>
</tr>
<tr>
<td>Seçili kısmın değerini hesaplayıp göstermek</td>
<td>Hücre içindeki formül seçilip F9</td>
</tr>
<tr>
<td>Aktif sayfada calculation yapmak</td>
<td>SHIFT+F9</td>
</tr>
<tr>
<td>Sadece belli range için calculation yapmak</td>
<td>VBA ile yapılır. <a href="/Konular/VBAMakro/DortTemelNesne_Range.aspx#Calculation">Burdan </a>bakın.</td>
</tr>
<tr>
<td>Bulunduğun hücrenin <abbr title="Bulunulan hücrenin etrafındaki tüm dolu alandır">CurrentRegion</abbr>'ını seçme</td>
<td>CTRL+ A</td>
</tr>
<tr>
<td>Bulunduğun hücreden <abbr title="Bulunulan hücrenin etrafındaki tüm dolu alandır">CurrentRegion</abbr>'ın uç noktlarına gitmek</td>
<td>CTRL+ Ok tuşları</td>
</tr>
<tr>
<td>Bulunduğun hücreden itibaren belli bir yöne doğru seçim yapmak</td>
<td>SHIFT+Ok tuşları</td>
</tr>
<tr><td>Bulunduğun hücreden itibaren <abbr title="Bulunulan hücrenin etrafındaki tüm dolu alandır">CurrentRegion</abbr> bir ucuna doğru toplu seçim yapmak</td>
<td>CTRL+SHIFT+Ok tuşları</td>
</tr>
<tr>
<td>Bulunduğun hücreden <abbr title="Bulunulan hücrenin etrafındaki tüm dolu alandır">CurrentRegion</abbr>'ın Sağ Aşağı uç noktlasına gitmek</td>
<td>CTRL+END</td>
</tr>
<tr>
<td>Bulunduğun hücreden <abbr title="Bulunulan hücrenin etrafındaki tüm dolu alandır">CurrentRegion</abbr>'ın Sağ Aşağı uç noktlasına kadar seçmek</td>
<td>CTRL+SHIFT+END</td>
</tr>
<tr>
<td>Bulunduğun hücreden  A1 hücresine kadar olan alanı(sol yukarı) seçmek</td>
<td>CTRL+SHIFT+HOME</td>
</tr>
<tr>
<td>Bir hücre içinde veri girerken, aynı hücre içinde yeni bir satır açıp oradan devam etmek</td>
<td>ALT+ENTER</td>
</tr>
<tr>
<td>Veri/Formül girişi yaptığınız hücrede alt hücreye geçmeden giriş tamamlamak </td>
<td>CTRL+ENTER</td>
</tr>
<tr>
<td> Ekranda bir sayfa sağa kaymak.</td>
<td>ALT+PGE DOWN</td>
</tr>
<tr>
<td>AutoFilter'ı aktif/pasif hale getirmek</td>
<td>CTRL+SHIFT+L</td>
</tr>
<tr>
<td>Bulunduğunuz hücrenin satır ve sütununa aynı anda freeze uygulamak/kaldırmak</td>
<td>Alt+W+FF</td>
</tr>
<tr>
<td>VBA editörünü açmak</td>
<td>Alt+F11</td>
</tr>
<tr>
<td>Ribbonu küçültüp/büyütmek</td>
<td>CTRL+F1</td>
</tr>
<tr>
<td>Üst hücrelerdeki tüm rakamların toplamını almak</td>
<td>ALT+=</td>
</tr>
<tr>
<td>Flash Fill uygulamak</td>
<td>CTRL+E</td>
</tr>
<tr>
<td>Sadece görünen hücreleri seçmek</td>
<td>ALT+;</td>
</tr>
</table>

Gereksiz elementlerden ve taglerden kurtulalım

In [136]:
results = soup.find_all(class_='alterantelitable')
for r in results:
    tds=r.find_all("td")
    for td in tds:
        print(td.text)
Sayfalar arasında dolaşmak
CTRL + PgUp/PgDn
Bugünün Tarihini yazmak
CTRL + SHIFT +, 
Tüm açık dosyalarda calculation yapmak
F9
Seçili kısmın değerini hesaplayıp göstermek
Hücre içindeki formül seçilip F9
Aktif sayfada calculation yapmak
SHIFT+F9
Sadece belli range için calculation yapmak
VBA ile yapılır. Burdan bakın.
Bulunduğun hücrenin CurrentRegion'ını seçme
CTRL+ A
Bulunduğun hücreden CurrentRegion'ın uç noktlarına gitmek
CTRL+ Ok tuşları
Bulunduğun hücreden itibaren belli bir yöne doğru seçim yapmak
SHIFT+Ok tuşları
Bulunduğun hücreden itibaren CurrentRegion bir ucuna doğru toplu seçim yapmak
CTRL+SHIFT+Ok tuşları
Bulunduğun hücreden CurrentRegion'ın Sağ Aşağı uç noktlasına gitmek
CTRL+END
Bulunduğun hücreden CurrentRegion'ın Sağ Aşağı uç noktlasına kadar seçmek
CTRL+SHIFT+END
Bulunduğun hücreden  A1 hücresine kadar olan alanı(sol yukarı) seçmek
CTRL+SHIFT+HOME
Bir hücre içinde veri girerken, aynı hücre içinde yeni bir satır açıp oradan devam etmek
ALT+ENTER
Veri/Formül girişi yaptığınız hücrede alt hücreye geçmeden giriş tamamlamak 
CTRL+ENTER
 Ekranda bir sayfa sağa kaymak.
ALT+PGE DOWN
AutoFilter'ı aktif/pasif hale getirmek
CTRL+SHIFT+L
Bulunduğunuz hücrenin satır ve sütununa aynı anda freeze uygulamak/kaldırmak
Alt+W+FF
VBA editörünü açmak
Alt+F11
Ribbonu küçültüp/büyütmek
CTRL+F1
Üst hücrelerdeki tüm rakamların toplamını almak
ALT+=
Flash Fill uygulamak
CTRL+E
Sadece görünen hücreleri seçmek
ALT+;

İşlemle ilgili kısayolu altalta değil de yanyana yazmasını sağlayalım,

In [154]:
results = soup.find_all(class_='alterantelitable')
for r in results:
    trs=r.find_all("tr")
    for tr in trs:
        td1=tr.select("td")[0] #tr.find("td") de olurdu ama aşağıdakiyle bütünlük olması adına ikisini de select ile yaptık
        td2=tr.select("td")[1]
        print(td1.text,":",td2.text)
Sayfalar arasında dolaşmak : CTRL + PgUp/PgDn
Bugünün Tarihini yazmak : CTRL + SHIFT +, 
Tüm açık dosyalarda calculation yapmak : F9
Seçili kısmın değerini hesaplayıp göstermek : Hücre içindeki formül seçilip F9
Aktif sayfada calculation yapmak : SHIFT+F9
Sadece belli range için calculation yapmak : VBA ile yapılır. Burdan bakın.
Bulunduğun hücrenin CurrentRegion'ını seçme : CTRL+ A
Bulunduğun hücreden CurrentRegion'ın uç noktlarına gitmek : CTRL+ Ok tuşları
Bulunduğun hücreden itibaren belli bir yöne doğru seçim yapmak : SHIFT+Ok tuşları
Bulunduğun hücreden itibaren CurrentRegion bir ucuna doğru toplu seçim yapmak : CTRL+SHIFT+Ok tuşları
Bulunduğun hücreden CurrentRegion'ın Sağ Aşağı uç noktlasına gitmek : CTRL+END
Bulunduğun hücreden CurrentRegion'ın Sağ Aşağı uç noktlasına kadar seçmek : CTRL+SHIFT+END
Bulunduğun hücreden  A1 hücresine kadar olan alanı(sol yukarı) seçmek : CTRL+SHIFT+HOME
Bir hücre içinde veri girerken, aynı hücre içinde yeni bir satır açıp oradan devam etmek : ALT+ENTER
Veri/Formül girişi yaptığınız hücrede alt hücreye geçmeden giriş tamamlamak  : CTRL+ENTER
 Ekranda bir sayfa sağa kaymak. : ALT+PGE DOWN
AutoFilter'ı aktif/pasif hale getirmek : CTRL+SHIFT+L
Bulunduğunuz hücrenin satır ve sütununa aynı anda freeze uygulamak/kaldırmak : Alt+W+FF
VBA editörünü açmak : Alt+F11
Ribbonu küçültüp/büyütmek : CTRL+F1
Üst hücrelerdeki tüm rakamların toplamını almak : ALT+=
Flash Fill uygulamak : CTRL+E
Sadece görünen hücreleri seçmek : ALT+;

Bunun bir de MechanicalSoup versiyonu var, onda websitelerindeki formları da otomatik doldurma işlemi yaptırabiliyorsunuz.

Logging

Programınızı test ederken print değil bunu kullanmanız önerilir.

In [3]:
import logging

logging.debug('This is a debug message') 
logging.info('This is an info message')
#by default, the logging module logs the messages with a severity level of WARNING or above
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

root= default logger

In [7]:
logging.basicConfig(level=logging.DEBUG,force=True) #son parametre gerekli. Detay için: https://stackoverflow.com/questions/30861524/logging-basicconfig-not-creating-log-file-when-i-run-in-pycharm/42210221
logging.debug('This will get logged')
DEBUG:root:This will get logged
In [9]:
logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s',force=True)
logging.warning('This will get logged to a file')
In [14]:
logging.basicConfig(format='%(name)s - %(levelname)s - %(asctime)s - %(message)s', level=logging.INFO,force=True)
logging.info('Admin logged in')
root - INFO - 2021-05-13 00:01:25,862 - Admin logged in
In [15]:
name = 'John'
logging.error(f'{name} raised an error')
root - ERROR - 2021-05-13 00:01:28,562 - John raised an error
In [17]:
a = 5
b = 0

try:
    c = a / b
except Exception as e:
    logging.error("Exception occurred", exc_info=True)
root - ERROR - 2021-05-13 00:02:03,893 - Exception occurred
Traceback (most recent call last):
  File "<ipython-input-17-ed4209066cce>", line 5, in <module>
    c = a / b
ZeroDivisionError: division by zero

tqdm

Döngüsel işlemlerde progressbar sağlar

In [3]:
from tqdm import tqdm
from time import sleep
  
for i in tqdm(range(100)):
    sleep(.1)
100%|████████████████████████████████████████| 100/100 [00:10<00:00,  9.77it/s]

I/O (Dosya okuma yazma) işlemleri

Okuma

dosya = open(dosya_adı, kip)

In [175]:
os.chdir(r"C:\Users\volka\Documents\GitHub\PythonRocks")
In [182]:
import io
dp = io.open("utility.py", "r")
In [184]:
#oku
#import io #normalde bu satıra gerek yok, open=io.open için bi alias
dosya = io.open("utility.py", "r") #yine bunda da başta io yazmazdık normalde ama os'nin open'ından ayırmak için ekledik
print(dosya.readline(1))
print("----")
print(dosya.read()) #ilk satırı okuduğumuz için ikinci satırdan okumaya devam ediyor
print("----")
dosya.seek(0) #başa konumlanalım tekrar
print(dosya.readline(2)) #baştan ilk 2 karakter
f
----
rom __future__ import print_function
import inspect
import numpy as np

try:
    import __builtin__
except ImportError:
    import builtins as __builtin__
    
def lineno():
    return inspect.currentframe().f_back.f_back.f_lineno

def printy(*args, **kwargs):
    print(lineno(),"----------")
    print(*args, **kwargs)
    print(" ",end="\n")

def test():
    pass
    

----
fr
In [185]:
#her satırın başına satır no ekleyelim
dosya.seek(0)
i=1
for satır in dosya.readlines():
    print("{}-{}".format(i,satır),end="")
    i+=1
1-from __future__ import print_function
2-import inspect
3-import numpy as np
4-
5-try:
6-    import __builtin__
7-except ImportError:
8-    import builtins as __builtin__
9-    
10-def lineno():
11-    return inspect.currentframe().f_back.f_back.f_lineno
12-
13-def printy(*args, **kwargs):
14-    print(lineno(),"----------")
15-    print(*args, **kwargs)
16-    print(" ",end="\n")
17-
18-def test():
19-    pass
20-    
In [186]:
#yarat
yenidosya=io.open("test.txt","w")
yenidosya.close()
In [187]:
#varolana yaz, sonuna ekleme
yenidosya=io.open("test.txt","a")
yenidosya.write("\nselam")
yenidosya.flush() #hemen yazsın. bunu kullanmazsak yaptığımız değişiklikleri hemen görmeyiz

Güvenli dosya işlemleri

Dosyalarla işiniz bitince kapatmak önemlidir. Kapandığından emin olmak için with bloğu içinde yazmak gerekir

In [188]:
with io.open("test.txt", "r") as dosya:
    print(dosya.read())
selam
In [189]:
#hem okuma hem yazma moduyla açıp başa bilgi ekleme
with io.open("test.txt", "r+") as f:
    content = f.read()
    f.seek(0) #Dosyayı başa sarıyoruz
    f.write("volkan\n"+content)

Türkçe karakter

In [8]:
import locale
locale.getpreferredencoding()
Out[8]:
'cp1254'
In [9]:
with open(r"E:\OneDrive\Dökümanlar\GitHub\PythonRocks\abc.txt", "r", encoding='cp1254') as f:
    print(f.read())
Bu birinci satır
bu ikinci
bu da üçüncü

Yazma

In [26]:
yenidosya=io.open("writetest.txt","w") #x
yenidosya.write("merhaba\n")
lines=["satır1\n","satır2\n"]
yenidosya.writelines(lines)
yenidosya.close()
Out[26]:
8
In [27]:
#varolana yaz, sonuna ekleme
yenidosya=io.open("writetest.txt","a")
yenidosya.write("\nselam")
yenidosya.flush() #hemen yazsın. bunu kullanmazsak yaptığımız değişiklikleri hemen görmeyiz
yenidosya.close()
Out[27]:
6
In [29]:
f = io.open(r"E:\OneDrive\Dökümanlar\GitHub\PythonRocks\abc.txt", "a", encoding='utf-8')
f.write("yeni satır ekleniyor")
f.close()
Out[29]:
20

Veritabanı işlemleri

In [190]:
import sqlite3 as sql #python içinde otomatikman gelir

sqlite sayfasından chinook databaseini indirin

In [191]:
vt = sql.connect(r'C:\Users\volka\Downloads\chinook\chinook.db')
In [192]:
cur=vt.cursor()
In [193]:
cur.execute("select * from albums")
Out[193]:
<sqlite3.Cursor at 0x18a62c409d0>
In [194]:
cur.fetchmany(3)
Out[194]:
[(1, 'For Those About To Rock We Salute You', 1),
 (2, 'Balls to the Wall', 2),
 (3, 'Restless and Wild', 2)]
In [195]:
veriler = cur.fetchall()
In [196]:
veriler[:5] #ilk 3ünü çektiğimiz için 4ten devam ediyor
Out[196]:
[(4, 'Let There Be Rock', 1),
 (5, 'Big Ones', 3),
 (6, 'Jagged Little Pill', 4),
 (7, 'Facelift', 5),
 (8, 'Warner 25 Anos', 6)]
In [197]:
vt.close()

NOT:sqlite3 çok basit bir veritabanı olup, oracle veya sql server gibi güçlü veritabanlarını sorgulamak için sqlalchemy veya pyodbc gibi modülleri kullanırız ve buradan aldığmız datayı pandas ile işleyebiliriz. Bunun için benim github repomdaki Python Veri Analizi notebookuna bakmanızı tavsiye ederim.

http://sqlitebrowser.org/. sitesi de incelenebilir

Classlar

Python nesne yönelimli(oo) bir dildir ve tüm oo dillerde olduğu gibi sınıflar yaratılabilir. Örnek bir sınıf yaratımı aşağıdaki gibi olup detaylar için googlelamanızı rica ederim.

In [198]:
class Araba:
    aractipi="Mekanik" #class seviyesinde, tüm Arabalar tarafından paylaşılan bir değer
    def __init__(self,model,marka,km):
        self.model=model
        self.marka=marka
        self.km=km
        print("yeni araç hazır")
    def run(self):
        print("çalışıyor")
    def stop(self):
        print("durdu")

bmw0=Araba(2011,"bmw",0)
bmw1=Araba(2014,"bmw",0)
audi=Araba(2011,"audi",0)
print(bmw0)
bmw0.run()
bmw0.stop()
print(bmw0.aractipi)
print(audi.aractipi)
yeni araç hazır
yeni araç hazır
yeni araç hazır
<__main__.Araba object at 0x0000018A63391860>
çalışıyor
durdu
Mekanik
Mekanik

Paralelleştirme

Özellikle analitik model kurma sırasında çok işimize yarayan bir olgudur. Bunun için ayrı bir notebook'um olacak. Önden araştırmak isteyenler şu kavramları araştırabilir. Multi-threading, multiprocessing, conccurency ve parallelism

Verimlilik ve Diğer

debugging

In [199]:
import pdb
print(4)
pdb.set_trace() #c devam, n:next gibi seçenekler var
print("asda")
4
--Return--
> <ipython-input-199-42ee3069980c>(3)<module>()->None
-> pdb.set_trace() #c devam, n:next gibi seçenekler var
(Pdb) c
asda

memory yönetimi

In [200]:
import sys
import array
t=(1,2,3)
l=[1,2,"3"]
a=array.array("l",[1,2,3])
print(sys.getsizeof(t)) #immutabel olduğu için daha az
print(sys.getsizeof(l)) #mutable olduğu için tupldan daha çok, içine farklı tipler alabileceğim için arraydan daha çok
print(sys.getsizeof(a)) #eleman tipi belli olduğu için listten daha az
72
88
76

Kod saklama

Özellikle Data Science çalışmalarınızda olmak üzere bazen detay bilgi verdiğiniz markdown açıklamaları bazen de python kodunuzu gizlemek ve dokümanınızın boyutunu küçültebilrsiniz. Markdownlar için, sadece ilgili yeri okumak isteyenler gizlenmiş kısmı açarak okuyabilir. Kodlar için ise, kodun kendisinden ziyade kodun sonucunu(özellikle görselleştirme kodunu) görmek isteyenlere sadece sonucunu gösterme imkanı bulmuş olursunuz.

Markdownda detay bilgi gizleme

Falanca konu(detay görmek için tıklayın)

Buraya çeşitli bilgiler yazılabilir.

Burası bir markdown hücresi olup içeriği görmek için çift tıklayın.

Gördüğünüz gibi burada details elementi içinde summary elementi kullanıyoruz

Kod gizleme

Kodlarınızı gizlemek için ise aşağıdaki kodu kullanabilirsiniz.

DİKKAT:Bu örnekte, butona bastığınızda sayfadaki tüm input hücreleri gizlenir. Bunlar tekrar göstermek için butona bir kez daha basın.

Bu konuda daha farklı çözümleri şu sayfada bulabilirsiniz.

In [201]:
#python code
import matplotlib.pyplot as plt
%matplotlib inline
_, axes = plt.subplots(2, 2)

axes[0, 0].plot(range(10), 'r') #row=0, col=0
axes[1, 0].plot([x**2 for x in range(10)], 'b') #row=1, col=0
axes[0, 1].plot([x**3 for x in range(10)], 'g') #row=0, col=1
axes[1, 1].plot([x**4 for x in range(10)], 'k') #row=1, col=1
plt.show()

#kod gizlemek için burdan itibaren olan kısım kullanılır
from IPython.display import HTML

HTML('''<script>
code_show=true; 
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
} 
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Kodu görmek/gizlemek için tıklayın."></form>''')
Out[201]:

Cheatsheet

cheatsheet.png

Kendinizi test edin

Aşağıdaki adreslerden birinden challange sorularını görebilirsiniz.