Son değiştirilme tarihi:16.10.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.
NOT: Normalde Anaconda birçok paketi ve programı baırndırdığı için bilgisayarınızda çok yer kaplamakta olup ilerde anacondayı kaldırıp pure python kurulumu yapmanızı, ve sadece ihtyiacınız olan paketleri kurmanızı tavsiye ederim. Ancak herşeyin hazır gelmesi sebebiyle ilk başta anaconda ile başlamanız yerinde oalcaktır. Disk sorununuz yoksa anaconda ile devam da edebilirsiniz.
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)
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>''')
from IPython.display import YouTubeVideo
YouTubeVideo('JEv5oigBUL0')
a=1
liste=[]
print(type(a),type(liste))
<class 'int'> <class 'list'>
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.
[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ı. Biraz aşağıda göreceğimiz 'list comprehension' yönteminden faydalanarak listeyi daralttım
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
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)
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.
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.
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
a=1
b=2
a
b
1
2
#! 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
# "#" işareti ile yorum yazarız
%%HTML
Farklı dil seçeneklerin <em>kullanabiliyoruz</em>. Burada HTML kullanmış olduk.
%%latex #Latex ile matematiksel formüller girebiliyoruz
$$E=mc^2$$
$sin(x)/x$
Hizalama
Yukarıdaki code hücresiyidi, bu ise markdown hücresidir
$$ ile yazım formülü ortalar
$ ile yazımda ise sola dayalı ve küçük
$\frac \pi 2$
Diğer ifadeler
\frac ifadesi ile kesirler
_ karakteri ile indis(subscript)
\pi, \sum, \bar ve \hat gibi özel ifadeler
#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')
#dahası da var, müzik ve video da ekleyebiliyoruz
from IPython.display import Audio
Audio(url="http://www.nch.com.au/acm/8k16bitpcm.wav")
from IPython.display import YouTubeVideo
YouTubeVideo('NGrJjLCpKSA') # reklamımı da yapayım :)
Latex ve Ipython.display hakkında daha fazla bilgi için https://nbviewer.jupyter.org/github/ipython/ipython/blob/2.x/examples/Notebook/Display%20System.ipynb
#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)
Output()
sayi=1 #değişkenler doğrudan atanır. türkçe karakter kullanmamaya çalışın
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
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
#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 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
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.
Ü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.
"Pep 008 python" araması yapın ve tüm detayları görün. aşağıda sadece "_" kullanımını koydum
_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.
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/
#örnek olarak şimdi DeepLearning paketi olan kerası kuruyorum
#conda install keras
#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
#bi kapet hakkında bilgi
!pip show numpy
# 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のフォント設定を自動で日本語化する 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
#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)
#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)
#paketi komple kaldırmak için
#!pip uninstall paketadı
#python versiyonu öğrenmek
!python --version
Python 3.7.3
#python'ın versiyonunu yükseltmek
#!conda update python
#packageler hangi klasörlere kuruluyor
import sys
sys.path
['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']
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
NOT: Performans açısından mümkün mertebe az şey import etmeye çalışın.
from math import sqrt #math modülünden sqrt fonksiyonu
kök=sqrt(16)
kök
4.0
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
Zaman geçtiktçe, bazı işleri sık yaptığınızı farkedeceksiniz ve bunları(sınıflar, fonkisyonlar) kendinize ait bir modülde toplayacaksınız. Sonrasında bunu normal bir modül import eder gibi ederiz.
# mypythonutility.py isminde bir dosyanız olduğunuzu düşünrsek
# import mypythonutility
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:
%load_ext autoreload
%autoreload 2
Burayı daha ileride okuyun, şimdilik aklınızda bulunması için ve konu bütünlüğü adına burda olması daha iyi diye düşündüm. Yoksa bi üstteki maddeyi bilmeniz şimdilik yeterli.
Yazdığınız modülü çağırmak istediğinizde ya onunla aynı klasörde olmanız ya da os.chdir() yaparak ilgili klasöre konumlanmanız gerekir. Sürekli bununla uğraşmamak için modülünüzü bir package haline getirmeniz faydalı olacaktır.
Bunun için bir klasör yaratın ve içine bu py dosyanızı koyun. Bu klasöre bir de içi boş bir '__init__.py'
dosyası koyun. Sonra bu klasörü tüm python paketlerinin olduğu klasöre(site-packages) taşıyın.
Eğer ki jupyterhub gibi yetkilerinizin sınırlı olduğ bir ortamda çalışıyorsanız, ve site-packages'ta klasöre açma yetkiniz yoksa, kendinize ayrılmış alanda bu klasörü oluşturup sistem pathine ekleyin. Bunu da aşağıdaki komutla yapabilirsiniz.
# import sys
# sys.path += "klasörün konumu"
# print(sys.path) #path'e eklenmiş mi görmek için bunu da yazalım
https://realpython.com/python-virtual-environments-a-primer/ sayfasında güzel anlatılmış.
#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)
#î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
#yaratma
!py -m venv env #bulunduğumuz aktif klasör içinde yaratır
#aktivasyon
!.\env\Scripts\activate
#bakalım PATH'e eklenmiş mi
p=!PATH
str(p).split(";")
["['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', "']"]
!where python
C:\Users\volka\AppData\Local\Programs\Python\Python38-32\python.exe C:\Users\volka\AppData\Local\Microsoft\WindowsApps\python.exe
!deactivate
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'>
#Legal variable names:
myvar = "John"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"
#Illegal variable names:
# 2myvar = "John"
# my-var = "John"
# my var = "John"
#çoklu değer atama
x, y, z = "Orange", "Banana", "Cherry"
print(x)
print(y)
print(z)
Orange Banana Cherry
#exponential
x = 1e9
y = 123E9
x
y
123000000000.0
y=float(1)
z=int(2.8)
s=str(y)
y,type(y)
z,type(z)
s,type(s)
print(s,type(s))
(1.0, float)
(2, int)
('1.0', str)
1.0 <class 'str'>
z="1"
y=int(z)
type(y)
int
x=1
print(isinstance(x,int))
True
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.
def islem_yapan_parametresiz_fonksiyon(): #c tabanlı dillerdeki void dönüş tipi
print("selam")
islem_yapan_parametresiz_fonksiyon()
selam
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
#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
Parametreler belirlenmiş sayıda olmak zorunda değil. Esnek sayıda parametre alma imkanı var.
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
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
def opsiyonelli(adet,min_=1, max_=10):
print(adet,min_,max_)
opsiyonelli(100,5) #son parametre 10 geçer
100 5 10
Lambda ifadeler, fonksiyon tanımlamak yerine inline şekilde işlem yapmaya imkan verir
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
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
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.
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
mesaj="İnsanların yaklaşık %s kadın olup %s erkektir" % ("yarısı","kalanı")
mesaj
#s:string, d:sayı
'İnsanların yaklaşık yarısı kadın olup kalanı erkektir'
#daha çok bu yöntem, {}
mesaj="Python {} bir dildir".format("güzel")
mesaj
'Python güzel bir dildir'
# ya da + ile basit concat
mesaj="python"
mesaj=mesaj + " güzel bir dildir"
mesaj
'python güzel bir dildir'
#en son yöntem: f-string / f-literal olarak da geçer
ad="volkan"
yas=41
print(f"Benim adım {ad} olup yaşım {yas}")
Benim adım volkan olup yaşım 41
#f ilteral ile binlik ayraç ve küsurat işleri
dunyanufusu=8000000000
pi=3.14159
print(f"pi sayısı yaklaşık olarak {pi:.2f} olup dünyada yaklaşık {dunyanufusu:,} kişi yaşamaktadır")
pi sayısı yaklaşık olarak 3.14 olup dünyada yaklaşık 8,000,000,000 kişi yaşamaktadır
parçalı=metin.split()
parçalı
['volkan', 'yurtseven']
print(metin*3)
volkan yurtsevenvolkan yurtsevenvolkan yurtseven
metin.replace("e","i")
'volkan yurtsivin'
print(metin.upper(), metin.lower(), metin.capitalize(), metin.title())
VOLKAN YURTSEVEN volkan yurtseven Volkan yurtseven Volkan Yurtseven
print(metin.startswith("v"),metin.endswith("d"))
True False
kelime=" naber dostum "
print("yeni:"+kelime.strip()+".") #ortadakini silmez
yeni:naber dostum.
isim="Volkan"
user="ABC123"
yas="42" #tırnak içinde olmalı
mail="volkan.yurtseven@hotmail.com"
print(isim.isalnum(),user.isalnum(),yas.isalnum(),mail.isalnum())
print(isim.isalpha(),user.isalpha(),yas.isalpha(),mail.isalpha())
print(isim.isdigit(),user.isdigit(),yas.isdigit(),mail.isdigit()) #isnumeric de olur. fark için https://stackoverflow.com/questions/44891070/whats-the-difference-between-str-isdigit-isnumeric-and-isdecimal-in-python
print(isim.isprintable(),user.isprintable(),yas.isprintable(),mail.isprintable())
True True True False True False False False False False True False True True True True
Tüm diğer string metodları için şuraya bakabilirsiniz: https://www.w3schools.com/python/python_ref_string.asp
#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
#literaller: b,r,f
a=b"volkan"
b="volkan"
print(type(a))
print(type(b))
<class 'bytes'> <class 'str'>
import sys
sys.getsizeof(a)
sys.getsizeof(b)
55
adres1="c:\\falanca\\filanca"
adres2=r"c:\falanca\filanca"
adres1==adres2
True
#liste çevirme
liste=list(metin)
print(liste)
['v', 'o', 'l', 'k', 'a', 'n', ' ', 'y', 'u', 'r', 't', 's', 'e', 'v', 'e', 'n']
#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
for m in metin:
print(m,end="\n")
v o l k a n y u r t s e v e n
#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"
metin.count("e") #metin değişkeninde e harfi kaç kez geçiyor
2
import string
string.punctuation
string.printable
string.whitespace
string.digits
string.ascii_letters
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
' \t\n\r\x0b\x0c'
'0123456789'
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
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.
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
#one-liner -(ternary) if-else
x=3
sonuc="high" if x>10 else "low"
print(sonuc)
low
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.
fruits = ["apple", "banana", "cherry"]
for x in fruits:
print(x)
apple banana cherry
#klasik for için range kullanımı.
for i in range(len(fruits)):
print(fruits[i])
apple banana cherry
#metinler de loop ile dolaşılabilir
isim="volkan"
for i in isim:
print(i,end="-")
v-o-l-k-a-n-
#döngüden çıkış
fruits = ["apple", "banana", "cherry"]
for x in fruits:
print(x)
if x == "banana":
break
apple banana
#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
#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
#hackerrank sitesindeki bir ödev
def staircase(n):
for i in range(n):
print((n-i-1)*" "+"#"*(i+1))
staircase(6)
# ## ### #### ##### ######
tüm liste bittiğinde son olarak bu kısım yürütülür
for i in range(4):
print(i)
else:
print("bitti")
0 1 2 3 bitti
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
koşul sağlanmadığında yürütülür
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ü varsa, break ifadesi en içteki döngüden çıkar ve o bloktan sonraki ilk satırdan devam eder
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']
#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']
#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
[(11, 15, 26)]
#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)]
#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
[(11, 15, 26)]
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
son=liste.pop() #son elemanı çıkarıp buna atar
print(son)
print(liste)
6 [0, 1, 2, 3, 4, 5]
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]
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.
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']
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']
List gibi ama değişmez yapılardır yani eleman eklenip çıkarılamaz. [] yerine () veya parantezsiz
tpl=(1,2,3)
tpl2=1,2,3
print(type(tpl2))
<class 'tuple'>
tüm veri yapılarıyla uygulanabilir. uzun döngü yazmaktan kurtarır. c#'taki LINQ işlemlerinin benzer hatta daha güzel alternatifi
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]
[x for x in datastruct if x ...]
[x if ... else y for x in datastruct]
kısaisimlimeyveler=[x for x in meyveler if len(x)<5]
kısaisimlimeyveler
['üzüm', 'muz', 'muz', 'elma']
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]
**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]
# 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]
# 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]
# 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']
flatten_planets = [planet for sublist in planets for planet in sublist if len(planet) < 6]
print(flatten_planets)
['Venus', 'Earth', 'Mars', 'Pluto']
kısalar=[p for iç in planets for p in iç if len(p)<6]
kısalar
['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
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 iç in matris for x in iç]) #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]]
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]]
# 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]]
Normalde böyle bi sınıf yok. list'i stack gibi kullanırız. append ve pop sayesinde. ilk giren ilk çıkar
stack=[1,2,3]
stack.append(4)
stack.pop()
stack
[1, 2, 3]
Bunu da istersek listten yaparız, ilk giren son çıkar. ama bunun için collections modülünde bi sınıf var
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])
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.
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
bu ikili yapılar genelde zip veya enumerate olacaktır. bakınız ilgili fonksiyonar.
tpl=[("one","bir"),("two","iki"),("three","üç")]
dict_=dict(tpl)
print(type(dict_))
dict_["one"]
<class 'dict'>
'bir'
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)])
for k,v in ciftlerinkaresi.items():
print(k,v)
0 0 2 4 4 16 6 36 8 64
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
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
liste=[1,1,2,3,4,4,5]
set_=set(liste)
set_
{1, 2, 3, 4, 5}
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.
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
#tekrar ayırmak için
x2, y2 = zip(*onkatlar)
x2
(1, 2, 3)
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
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'>
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
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
[1, 4, 9, 16, 25]
#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
#comprehensionla da yapılabilir.
çarpım=[x*y for x,y in zip(range1,range2)]
çarpım
[1, 6, 15, 28, 45, 66, 91, 120, 153]
harfler=map(chr,range(97,112))
list(harfler)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o']
harfler2=[chr(x) for x in range(97,112)]
harfler2
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o']
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
362880
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
#veya lambda ile
list(filter(lambda x:x>=18,ages))
[18, 24, 32]
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
liste1=[True,True,False]
liste2=[True,True,True]
print(all(liste1))
print(any(liste1))
print(all(liste2))
False True True
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
print([i for i in dir(dt) if not "__" in i])
['MAXYEAR', 'MINYEAR', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
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
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']
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']
print([i for i in dir(du) if not "__" in i])
['_common', '_version', 'parser', 'relativedelta', 'tz']
%'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%%timeit
x=sum(range(1000000))
78.9 ms ± 3.45 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%time
x=sum(range(1000000))
Wall time: 154 ms
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)
#tit.Timer(hesapla).timeit() uzun sürüyo ve bitmiyo ??
bas=t.time()
print("hey")
hesapla()
bit=t.time()
print("süre:{}".format(bit-bas))
hey süre:0.07879209518432617
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:
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.
İş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.
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
'E:\\OneDrive\\Dökümanlar\\GitHub\\PythonRocks'
'.'
os.chdir(os.curdir + "\.git") #aktif klasörü değiştiriyoruz
os.pardir #parent klasörü temsil eden karakter
'..'
os.listdir() #o anki aktif folderdaki dosyaları lsiteler
['COMMIT_EDITMSG', 'config', 'description', 'FETCH_HEAD', 'HEAD', 'hooks', 'index', 'info', 'logs', 'objects', 'ORIG_HEAD', 'refs']
os.listdir(os.pardir)
['.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__']
os.path.exists('Python Genel.ipynb') #bir dosya/klasör mevcut mu
True
os.path.isfile('olmayandosya.txt') #parametredeki bir dosya mı? veya bir dosya mevcut mu anlamında da kullanılabilir.
False
os.path.isdir("klasor")
False
# 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']
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
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
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
os.startfile('calc.exe') #dosya açar, program başaltır, internet sitesine gider v.s
os.startfile(r'E:\OneDrive\Uygulama Geliştirme\PDF dokümantasyon\AI & DS\Pandas & EDA & ML\pandas.pdf')
os.startfile("www.volkanyurtseven.com")
import platform, os
print(os.name)
print(platform.system())
print(platform.release())
nt Windows 10
dict(os.environ)
{'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'}
print(dict(os.environ)["HOMEPATH"])
print(dict(os.environ)["USERNAME"])
\Users\volka volka
os.path.expanduser('~')
'C:\\Users\\volka'
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]
#liste karıştırmak
random.shuffle(dizi)
dizi
[8, 1, 2, 9, 3, 5, 3]
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.
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
my_list = ["a","b","c","c","e","c","b","b","a"]
my_list.count("a")
2
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
str_ = "sen seni bil sen seni sen bilmezsen kendini"
cn = Counter(str_.split(' '))
cn
Counter({'sen': 3, 'seni': 2, 'bil': 1, 'bilmezsen': 1, 'kendini': 1})
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}
#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
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
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')]
from itertools import combinations #n!/(r!*(n-r)!)
com=list(combinations(liste,2))
com
[('A', 'B'), ('A', 'C'), ('B', 'C')]
from itertools import product
list1=["A","B","C"]
list2=[2000,2001,2002,2003]
krt=list(product(list1,list2))
krt
[('A', 2000), ('A', 2001), ('A', 2002), ('A', 2003), ('B', 2000), ('B', 2001), ('B', 2002), ('B', 2003), ('C', 2000), ('C', 2001), ('C', 2002), ('C', 2003)]
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
import re
a="benim adım volkan"
#match: başında var mı diye kontrol eder
re.match("volkan",a) #eşleşme yok, sonuç dönmez
re.match("ben",a) #var
<re.Match object; span=(0, 3), match='ben'>
a.startswith("ben") #bu daha kullanışlıdır.
True
#search, herhangi bi yerde var mı, matche göre daha yavaş çalışır
re.search("volkan",a)
<re.Match object; span=(11, 17), match='volkan'>
"volkan" in a #bu daha pratik
True
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
isimler=["123a","ali","veli","hakan","volkan","osman","kandemir","VOLkan"]
#kan ile bitenler, regex olmadan
kan=[x for x in isimler if x[-3:]=="kan"]
kan
['hakan', 'volkan', 'VOLkan']
[] 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
#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
#içinde e veya m geçenler, bu sefer list comprehension ile yapalım
[i for i in isimler if re.search("[em]",i)]
['veli', 'osman', 'kandemir']
#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
['123a', 'b123', '1234']
#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
['123a', '1234']
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']
"." tek karekteri için joker anlamındadır
isimler=["arhan","volkan","osman","hakan","demirhan","1ozan"]
#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
['arhan', 'osman', 'hakan']
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.
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)]
['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.
Yıldıza benzer, ancak bu sefer en az 1 sayıda eşleşme yapar.
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)]
['kıral', 'kıro', 'kıritik', 'kııral']
#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
Kendinden önce gelen karakterin 0 veya 1 kez geçtiği durumları eşleştirir.
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)]
['kıral', 'kral', 'kıro', 'kro', 'kritik', 'kıritik']
bir karekterin n adet geçtiği durumlar eşleştirilir.
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)]
['kııral']
#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)]
['kııral']
#{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
['gool', 'gooool']
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 yapısı python dictionary'lerine çok benzer. elde edeceğimiz nesne de bir dictionary olacaktır
import json
#ö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"]
'John'
#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
dict
{'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}}
#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 } }
#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 ] ] }
#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 } ] }
c=json.loads(content)
type(c)
c
dict
{'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}]}
#içteki tek bir bilgiye ulaşma
c["data"][0]["Bolge"] #dict of list of dict
'Akdeniz'
#tüm bölgeleri alma
for l in c["data"]:
print(l["Bolge"])
Akdeniz Marmara Akdeniz Marmara
x = {
"name": "John",
"age": 30,
"city": "New York"
}
j = json.dumps(x)
type(x)
type(j)
j
dict
str
'{"name": "John", "age": 30, "city": "New York"}'
#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}]}
#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 } ] }
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.
https://realpython.com/python-requests/ sitesinden faydalandım
import requests
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"
r=requests.get(httpget3)
r.headers
{'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'}
requests.get('http://volkanyurtseven.com')
<Response [200]>
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'")))
requests.get('http://volkanyurtseven.com/olmayansayfa') #bu sefer site doğru ama bahsekonu sayfa yoksa 404
<Response [404]>
response = requests.get('http://volkanyurtseven.com')
response.status_code
200
response = requests.get(httpget1)
response.content #byte olarak
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+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> '
response.text #string olarak
'<!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+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> '
response.raw
<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.
#hala biraz okunaklı değil gibi
response = requests.get(httpget1json)
response.text
'{"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}'
json.loads(response.text)
{'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}
#veya responseun json metopdunu kullanabiliriz
response.json()
{'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.
response.raise_for_status()
response.status_code
200
dict(response.headers)
{'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'}
response.headers['Content-Type']
'application/json'
# 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
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
response.text
'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&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'
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('https://httpbin.org/get', params=payload)
r.headers
{'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'}
#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]}]}]
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')
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
response = requests.head('https://httpbin.org/get')
response.headers['Content-Type']
'application/json'
response = requests.delete('https://httpbin.org/delete')
json_response = response.json()
json_response['args']
{}
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.
requests.post('https://httpbin.org/post', data={'key':'value'}) #veya data=[('key', 'value')]
<Response [200]>
>>> 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'
'{"key": "value"}'
'{"key": "value"}'
'application/json'
'application/json'
>>> 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"}'
'application/json'
'application/json'
'https://httpbin.org/post'
'https://httpbin.org/post'
b'{"key": "value"}'
b'{"key": "value"}'
response.url
response.headers
response.request.url
response.request.headers
'https://httpbin.org/post'
{'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'}
'https://httpbin.org/post'
{'User-Agent': 'python-requests/2.24.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '16', 'Content-Type': 'application/json'}
#authhentication
>>> from getpass import getpass
>>> requests.get('https://api.github.com/user', auth=('username', getpass()))
········
<Response [401]>
URL = 'https://www.monster.com/jobs/search/?q=Software-Developer&where=Australia'
page = requests.get(URL)
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')
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
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,
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.
Programınızı test ederken print değil bunu kullanmanız önerilir.
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
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
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')
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
name = 'John'
logging.error(f'{name} raised an error')
root - ERROR - 2021-05-13 00:01:28,562 - John raised an error
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
Döngüsel işlemlerde progressbar sağlar
from tqdm import tqdm
from time import sleep
for i in tqdm(range(10)):
sleep(.1)
100%|██████████████████████████████████████████| 10/10 [00:01<00:00, 9.24it/s]
# Simple loop
for i in range(100):
pass
# Loop with a progress bar
for i in trange(100):
time.sleep(0.01)
HBox(children=(HTML(value=''), FloatProgress(value=0.0), HTML(value='')))
from tqdm.notebook import trange, tqdm
from time import sleep
for i in trange(3, desc='1st loop'):
for j in tqdm(range(100), desc='2nd loop'):
sleep(0.01)
HBox(children=(HTML(value='1st loop'), FloatProgress(value=0.0, max=3.0), HTML(value='')))
HBox(children=(HTML(value='2nd loop'), FloatProgress(value=0.0), HTML(value='')))
HBox(children=(HTML(value='2nd loop'), FloatProgress(value=0.0), HTML(value='')))
HBox(children=(HTML(value='2nd loop'), FloatProgress(value=0.0), HTML(value='')))
Eğer progresbar görünmüyorsa mıuhtemelen nbextensionstaki bi widget üyüzndendir, şuraya bakın : https://stackoverflow.com/questions/57343134/jupyter-notebooks-not-displaying-progress-bars
!jupyter nbextension enable --py widgetsnbextension
Enabling notebook extension jupyter-js-widgets/extension... - Validating: ok
from tqdm import tqdm_notebook
from tqdm.notebook import trange
from time import sleep
for i in trange(4, desc='1st loop'):
for j in trange(100, desc='2nd loop'):
sleep(0.01)
HBox(children=(HTML(value='1st loop'), FloatProgress(value=0.0, max=4.0), HTML(value='')))
HBox(children=(HTML(value='2nd loop'), FloatProgress(value=0.0), HTML(value='')))
HBox(children=(HTML(value='2nd loop'), FloatProgress(value=0.0), HTML(value='')))
HBox(children=(HTML(value='2nd loop'), FloatProgress(value=0.0), HTML(value='')))
HBox(children=(HTML(value='2nd loop'), FloatProgress(value=0.0), HTML(value='')))
from tqdm.notebook import tqdm_notebook
import time
for i in tqdm_notebook(range(10)):
time.sleep(0.5)
HBox(children=(HTML(value=''), FloatProgress(value=0.0, max=10.0), HTML(value='')))
from tqdm import tqdm
for i in tqdm(range(2), desc = 'Loop 1'):
for j in tqdm(range(20,25), desc = 'Loop 2'):
time.sleep(0.5)
Loop 1: 0%| | 0/2 [00:00<?, ?it/s] Loop 2: 0%| | 0/5 [00:00<?, ?it/s] Loop 2: 20%|███████▏ | 1/5 [00:00<00:02, 1.96it/s] Loop 2: 40%|██████████████▍ | 2/5 [00:01<00:01, 1.96it/s] Loop 2: 60%|█████████████████████▌ | 3/5 [00:01<00:01, 1.97it/s] Loop 2: 80%|████████████████████████████▊ | 4/5 [00:02<00:00, 1.97it/s] Loop 2: 100%|████████████████████████████████████| 5/5 [00:02<00:00, 1.97it/s] Loop 1: 50%|██████████████████ | 1/2 [00:02<00:02, 2.55s/it] Loop 2: 0%| | 0/5 [00:00<?, ?it/s] Loop 2: 20%|███████▏ | 1/5 [00:00<00:02, 1.97it/s] Loop 2: 40%|██████████████▍ | 2/5 [00:01<00:01, 1.98it/s] Loop 2: 60%|█████████████████████▌ | 3/5 [00:01<00:01, 1.98it/s] Loop 2: 80%|████████████████████████████▊ | 4/5 [00:02<00:00, 1.98it/s] Loop 2: 100%|████████████████████████████████████| 5/5 [00:02<00:00, 1.98it/s] Loop 1: 100%|████████████████████████████████████| 2/2 [00:05<00:00, 2.54s/it]
from tqdm.notebook import tqdm_notebook
for i in tqdm_notebook(range(2), desc = 'Loop 1'):
for j in tqdm_notebook(range(20,25), desc = 'Loop 2'):
time.sleep(0.5)
HBox(children=(HTML(value='Loop 1'), FloatProgress(value=0.0, max=2.0), HTML(value='')))
HBox(children=(HTML(value='Loop 2'), FloatProgress(value=0.0, max=5.0), HTML(value='')))
HBox(children=(HTML(value='Loop 2'), FloatProgress(value=0.0, max=5.0), HTML(value='')))
dosya = open(dosya_adı, kip)
os.chdir(r"C:\Users\volka\Documents\GitHub\PythonRocks")
import io
dp = io.open("utility.py", "r")
#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
#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-
#yarat
yenidosya=io.open("test.txt","w")
yenidosya.close()
#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
with io.open("test.txt", "r") as dosya:
print(dosya.read())
selam
#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
import locale
locale.getpreferredencoding()
'cp1254'
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ü
yenidosya=io.open("writetest.txt","w") #x
yenidosya.write("merhaba\n")
lines=["satır1\n","satır2\n"]
yenidosya.writelines(lines)
yenidosya.close()
8
#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()
6
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()
20
import sqlite3 as sql #python içinde otomatikman gelir
sqlite sayfasından chinook databaseini indirin
vt = sql.connect(r'C:\Users\volka\Downloads\chinook\chinook.db')
cur=vt.cursor()
cur.execute("select * from albums")
<sqlite3.Cursor at 0x18a62c409d0>
cur.fetchmany(3)
[(1, 'For Those About To Rock We Salute You', 1), (2, 'Balls to the Wall', 2), (3, 'Restless and Wild', 2)]
veriler = cur.fetchall()
veriler[:5] #ilk 3ünü çektiğimiz için 4ten devam ediyor
[(4, 'Let There Be Rock', 1), (5, 'Big Ones', 3), (6, 'Jagged Little Pill', 4), (7, 'Facelift', 5), (8, 'Warner 25 Anos', 6)]
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
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.
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
Ö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
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
def myfunc(list_):
return [1/x for x in list_]
liste=[3,5,0,6,7]
yeniliste=myfunc(liste)
yeniliste
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-14-1b775e2893d4> in <module> 3 4 liste=[3,5,0,6,7] ----> 5 yeniliste=myfunc(liste) 6 yeniliste <ipython-input-14-1b775e2893d4> in myfunc(list_) 1 def myfunc(list_): ----> 2 return [1/x for x in list_] 3 4 liste=[3,5,0,6,7] 5 yeniliste=myfunc(liste) <ipython-input-14-1b775e2893d4> in <listcomp>(.0) 1 def myfunc(list_): ----> 2 return [1/x for x in list_] 3 4 liste=[3,5,0,6,7] 5 yeniliste=myfunc(liste) ZeroDivisionError: division by zero
%debug
> <ipython-input-14-1b775e2893d4>(2)<listcomp>() 1 def myfunc(list_): ----> 2 return [1/x for x in list_] 3 4 liste=[3,5,0,6,7] 5 yeniliste=myfunc(liste) ipdb> x 0 ipdb> quit
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
64 80 76
Ö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.
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
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.
#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>''')
Aşağıdaki adreslerden birinden challange sorularını görebilirsiniz.
Bunun dışında şu sitelerde de pratik yapma imkanı bulabilirsiniz.