<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archives des Python - Xavki</title>
	<atom:link href="https://xavki.blog/category/python/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Open your Sources..</description>
	<lastBuildDate>Mon, 10 Dec 2018 09:53:16 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>[Python] : quelques minutes avec Tkinter (GUI)</title>
		<link>https://xavki.blog/python-quelques-minutes-avec-tkinter-gui/</link>
					<comments>https://xavki.blog/python-quelques-minutes-avec-tkinter-gui/#comments</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Mon, 10 Dec 2018 09:53:16 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=567</guid>

					<description><![CDATA[<p><img width="905" height="433" src="https://xavki.blog/wp-content/uploads/2018/08/file-manager-python.png" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" fetchpriority="high" srcset="https://xavki.blog/wp-content/uploads/2018/08/file-manager-python.png 905w, https://xavki.blog/wp-content/uploads/2018/08/file-manager-python-300x144.png 300w, https://xavki.blog/wp-content/uploads/2018/08/file-manager-python-768x367.png 768w" sizes="(max-width: 905px) 100vw, 905px" />Tkinter est un module graphique pour python, un GUI (Graphical User Interface). Bien sûr, cet article intéressera les débutants car il s&#8217;agit de découvrir le module le plus simplement possible mais avec un exemple &#8220;concret&#8221;. Je dis concret en double... <a href="https://xavki.blog/python-quelques-minutes-avec-tkinter-gui/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-quelques-minutes-avec-tkinter-gui/">[Python] : quelques minutes avec Tkinter (GUI)</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="905" height="433" src="https://xavki.blog/wp-content/uploads/2018/08/file-manager-python.png" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" srcset="https://xavki.blog/wp-content/uploads/2018/08/file-manager-python.png 905w, https://xavki.blog/wp-content/uploads/2018/08/file-manager-python-300x144.png 300w, https://xavki.blog/wp-content/uploads/2018/08/file-manager-python-768x367.png 768w" sizes="(max-width: 905px) 100vw, 905px" /><p>Tkinter est un module graphique pour python, un GUI (Graphical User Interface). Bien sûr, cet article intéressera les débutants car il s&#8217;agit de découvrir le module le plus simplement possible mais avec un exemple &#8220;concret&#8221;. Je dis concret en double quotes car en fait ce n&#8217;est pas si utile que cela mais il faut bien avoir un but pour développer et écrire quelques lignes de codes.</p>
<p>Pour apprendre, je vous propose de réaliser un petit soft qui va avoir deux boutons (un pour quitter, l&#8217;autre pour lancer une action). L&#8217;action consistera à réaliser la liste des répertoires de ma home &#8220;~&#8221;. Et on affiche tout cela dans une fenêtre spécifique. Comme ceci :</p>
<p><img decoding="async" class=" size-full wp-image-569 aligncenter" src="http://xavki.blog/wp-content/uploads/2018/08/file_manager.png" alt="file_manager" width="520" height="409" srcset="https://xavki.blog/wp-content/uploads/2018/08/file_manager.png 520w, https://xavki.blog/wp-content/uploads/2018/08/file_manager-300x236.png 300w" sizes="(max-width: 520px) 100vw, 520px" /></p>
<p>Nous utiliserons deux modules :</p>
<ul>
<li>tkinter pour l&#8217;interface graphique</li>
<li>os : pour lister les répertoires au niveau de notre système</li>
</ul>
<pre>#!/usr/bin/python
#coding: UTF-8
import os
from Tkinter import *

def affichageRepertoires():
    path = os.path.expanduser("~/")
    for f in os.listdir(path):
        cadre2.insert(END, f + "\n")

if __name__ == '__main__':
    principale = Tk()
    cadre1 = LabelFrame(principale, text="FILE MANAGER", font="Arial 14")
    cadre1.grid(row=0, columnspan=2, sticky='E')

    Button(cadre1, text="Afficher répertoire", font="Arial 8", command=affichageRepertoires).grid(row=1, column=1)
    Button(cadre1, text="Quitter", font="Arial 8", command=principale.quit).grid(row=1, column=2)

    cadre2 = Text(master=principale)
    cadre2.grid(row=2, column=1, sticky=NW)
    
    cadre3 = Scrollbar(principale, orient=VERTICAL, command=cadre2.yview)
    cadre3.grid(row=2, column=2, rowspan=15, columnspan=1, sticky=NS)
    cadre2.config(yscrollcommand=cadre3.set, font=('Arial 8'))

    root.mainloop()

</pre>
<p>Les différentes lignes de codes permettent :</p>
<ol>
<li>codage en UTF8 (pour ne pas avoir de problème avec les accents)</li>
<li>import des deux modules</li>
<li>création d&#8217;une fonction  affichageRepertoires() :
<ol>
<li>utilisation de os.path : pour récupérer les chemins</li>
<li>parcourir la liste obtenue</li>
<li>afficher les éléments dans le cadre 2 avec un renvoi à la ligne à chaque fois</li>
</ol>
</li>
<li>le bloc principal :
<ol>
<li>création de la fenêtre principale</li>
<li>définition du premier cadre de type Label (avec titre intégré)</li>
<li>placement du cadre 1 aligné à droite dans la fenêtre et sur la première ligne d&#8217;une grille &#8220;imaginaire&#8221;</li>
<li>ajout des deux boutons dans le cadre 1 avec le texte qui correspond et surtout la commande qui va avec. Pour le premier la commande lance notre fonction affichageRepertoires() pour le second elle quitte la fenêtre &#8220;principale&#8221;. Attention l&#8217;alignement se fait toujours sur notre grille mais en ligne n°1 et colonne 1 puis 2 en fonction du bouton.</li>
<li>création du cadre 2 dans la fenêtre &#8220;principale&#8221;. Ce cadre sera alimenté par la fonction affichageRepertoires().</li>
<li>la grille nous permet une fois de plus de placer notre cadre en ligne n°2/colonne n°1 et aligné en haut à gauche (NW : nord ouest)</li>
<li>le cadre 3 consiste à ajouter la barre de défilement dans la fenêtre &#8220;principale&#8221; en se basant sur la fenêtre cadre 2 (command)</li>
<li>Positionnement de cadre 3</li>
<li>Configuration du cadre 2 avec la barre de défilement de cadre3</li>
</ol>
</li>
</ol>
<p>Tkinter pour python fait partie des modules très bien documentés. Vous pouvez <a href="http://fsincere.free.fr/isn/python/cours_python_tkinter.php">consulter cette page en français</a> et <a href="https://tkdocs.com/tutorial/">pour être plus complet cette page en anglais</a>.</p>
<p>&nbsp;</p>
<p>L’article <a href="https://xavki.blog/python-quelques-minutes-avec-tkinter-gui/">[Python] : quelques minutes avec Tkinter (GUI)</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/python-quelques-minutes-avec-tkinter-gui/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>[Sécurité] : scapy &#8211; scanner les réseaux wifi (SSID) et leur adresse MAC</title>
		<link>https://xavki.blog/securite-scapy-scanner-les-reseaux-wifi-ssid-et-leur-adresse-mac/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Fri, 30 Nov 2018 09:33:29 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Sécurité]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=623</guid>

					<description><![CDATA[<p><img width="4032" height="3024" src="https://xavki.blog/wp-content/uploads/2018/08/img-3211.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/08/img-3211.jpg 4032w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-300x225.jpg 300w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-768x576.jpg 768w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-1024x768.jpg 1024w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-1568x1176.jpg 1568w" sizes="auto, (max-width: 4032px) 100vw, 4032px" />Scapy, un mot qui peut faire peur car fait référence à certaines pratiques obscures en matière de sécurité. Effectivement, scapy fait partie des outils de base des hackers&#8230; peu importe leur couleur. Retrouvez la documentation en ligne ici et mes... <a href="https://xavki.blog/securite-scapy-scanner-les-reseaux-wifi-ssid-et-leur-adresse-mac/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/securite-scapy-scanner-les-reseaux-wifi-ssid-et-leur-adresse-mac/">[Sécurité] : scapy &#8211; scanner les réseaux wifi (SSID) et leur adresse MAC</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="4032" height="3024" src="https://xavki.blog/wp-content/uploads/2018/08/img-3211.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/08/img-3211.jpg 4032w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-300x225.jpg 300w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-768x576.jpg 768w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-1024x768.jpg 1024w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-1568x1176.jpg 1568w" sizes="auto, (max-width: 4032px) 100vw, 4032px" /><p>Scapy, un mot qui peut faire peur car fait référence à certaines pratiques obscures en matière de sécurité. Effectivement, scapy fait partie des outils de base des hackers&#8230; peu importe leur couleur. Retrouvez <a href="https://scapy.readthedocs.io/en/latest/index.html">la documentation en ligne ici</a> et <a href="https://xavki.blog/codes-et-scripts-python/">mes autres post python ici</a>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-624" src="http://xavki.blog/wp-content/uploads/2018/08/img-3211.jpg" alt="IMG-3211" width="4032" height="3024" srcset="https://xavki.blog/wp-content/uploads/2018/08/img-3211.jpg 4032w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-300x225.jpg 300w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-768x576.jpg 768w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-1024x768.jpg 1024w, https://xavki.blog/wp-content/uploads/2018/08/img-3211-1568x1176.jpg 1568w" sizes="auto, (max-width: 4032px) 100vw, 4032px" /></p>
<p>Scapy permet notamment de faire de nombreuses opérations sur les réseaux comme sniffer, envoyer des paquets, scanner&#8230;</p>
<p>Ne vous inquiétez pas je ne suis pas obscure. Il s&#8217;agit simplement de l&#8217;envie de découvrir cet outil dont on entend si souvent parler. Aujourd&#8217;hui j&#8217;ai voulu découvrir comment scanner les réseaux wifi autour de moi (à priori rien d&#8217;illégale là-dedans&#8230; après cela dépend de ce que l&#8217;on fait avec le scan).</p>
<p>Première chose à faire installer scapy :</p>
<pre>pip install scapy</pre>
<p>C&#8217;est donc un simple module que je peux ajouter à python.</p>
<p>Je me reporte ensuite à <a href="https://linuxsecurityblog.com/2016/02/04/sniffing-access-points-and-its-mac-addresses-using-python/">cet article</a> qui propose de scanner les réseaux wifi. Il me faut donc installer aircrack-ng pour avoir accès à la comande airmon-ng. Aircrack est un binaire qui permet de réaliser de nombreux opérations de pénétrations de réseaux wifi (cracjing de clé&#8230;).</p>
<pre>└─ $ ▶ sudo apt-get install aircrack-ng</pre>
<p>Airmon-ng va nous permettre de devenir observateur du réseau (sans action dessus). Je lance donc airmon sur mon interface wifi :</p>
<pre>sudo airmon-ng start wlp3s0</pre>
<p>Voilà pour la première étape donc. Maintenant il faut créer un fichier python qui va utiliser le module scapy (je me reporte à la page citée précédemment&#8230; on vera pour faire notre propre script plus tard).</p>
<p>Je créé un fichier scapy_scan.py avec ceci :</p>
<pre>from scapy.a:qll import *
ap_list = []
def packetRecup (pkt) :
    if pkt.haslayer (Dot11) :
        if pkt.type == 0 and pkt.subtype == 8 :
            if pkt.addr2 not in ap_list :
                ap_list.append(pkt.addr2)
                return "Réseau SSID: %s et MAC address: %s " %(pkt.info, pkt.addr2)
sniff(iface = "mon0" , prn = packetRecup)
</pre>
<p>Que contient ce script ?</p>
<ul>
<li>import de la totalité de scapy</li>
<li>création d&#8217;une liste ap_list</li>
<li>création de la fonction packetRecup</li>
<li>si pkt est un paquet sur le 802.11 (dot11) pour <a href="https://thepacketgeek.com/scapy-p-04-looking-at-packets/">en savoir plus sur l&#8217;objet paquet rendez-vous ici</a></li>
<li>ensuite on s&#8217;intéresse à l&#8217;entête du paquet avec son type et son sous-type (<a href="https://witestlab.poly.edu/blog/802-11-wireless-lan-2/">reportez vous ici pour des rappels sur l&#8217;entête de paquet WLAN</a>)</li>
<li>ajout à la liste l&#8217;adresse mac</li>
<li>puis affichage du résultat en indiquant le SSID et MAC address</li>
</ul>
<p>Conclusion : scapy est un outil qui à l&#8217;air simple à utiliser et à apprendre. Bien sûr il faut connaitre python avant toute chose et faire attention de ne pas partir sur des tentatives plus obscures dans l&#8217;utilisation de cet outil. Je pense que je me ferais encore quelques tests sur  mon réseau local notamment tenter de sniffer des paquets et de faire des envois car c&#8217;est un peu la base de l&#8217;outil.</p>
<p>Et vous vous utilisez scapy ?</p>
<p>L’article <a href="https://xavki.blog/securite-scapy-scanner-les-reseaux-wifi-ssid-et-leur-adresse-mac/">[Sécurité] : scapy &#8211; scanner les réseaux wifi (SSID) et leur adresse MAC</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] : Comment mettre en place un padding (retrait) sur votre sortie standard ?</title>
		<link>https://xavki.blog/python-comment-padding-sortie-standard/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Wed, 07 Nov 2018 20:56:27 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=603</guid>

					<description><![CDATA[<p><img width="1880" height="1255" src="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-768x513.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-1024x684.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-1568x1047.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" />Padding, je ne suis pas sûr que le terme soit tout à fait adapter. Mais en même temps je ne sais pas comment expliquer ce que je veux vous montrer. Concrètement je dirais comment centrer un texte en l&#8217;entourant de... <a href="https://xavki.blog/python-comment-padding-sortie-standard/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-comment-padding-sortie-standard/">[Python] : Comment mettre en place un padding (retrait) sur votre sortie standard ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="1880" height="1255" src="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-768x513.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-1024x684.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-11816711-1568x1047.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" /><p>Padding, je ne suis pas sûr que le terme soit tout à fait adapter. Mais en même temps je ne sais pas comment expliquer ce que je veux vous montrer.</p>
<p>Concrètement je dirais comment centrer un texte en l&#8217;entourant de caractères particuliers (spéciaux souvent) ? voici ce que nous cherchons à obtenir :</p>
<pre>#####Bonjour#####</pre>
<p>Ce genre d&#8217;affichage peut être sympa sur la sortie standard lorsque vous exécutez vos scripts. Ainsi vous pouvez faire des blocs et faire des mises en forme plus sympas.</p>
<p>Alors comment faire avec python ?</p>
<pre>&gt;&gt;&gt; text="bonjour"
&gt;&gt;&gt; "{:#^20}".format(text)
'######bonjour#######'</pre>
<p>Une autre ligne de commande fonctionne également :</p>
<pre>&gt;&gt;&gt;format(text, '*^20')</pre>
<p>Le padding centré est incrémenté par le caractère &#8220;^&#8221;.</p>
<p>Pour réaliser un simple padding à gauche (un retrait à gauche), vous devriez passer la commande suivante :</p>
<pre class="chroma"><code class="language-python"><span class="n">&gt;&gt;&gt;format</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s1">'&gt;20'</span><span class="p">)</span></code></pre>
<p>Et le retrait à droite pour la forme :</p>
<pre class="chroma"><code class="language-python"><span class="n">&gt;&gt;&gt;format</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s1">'&lt;20'</span><span class="p">)</span></code></pre>
<p>Pour en savoir un peu plus sur ce sujet, <a href="https://docs.python.org/3.7/library/string.html#format-specification-mini-language">consultez la doc officielle python des spécifications des formats sur cette page</a>.</p>
<p>L’article <a href="https://xavki.blog/python-comment-padding-sortie-standard/">[Python] : Comment mettre en place un padding (retrait) sur votre sortie standard ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] : comment simplifier vos switch case avec la fonction lambda ?</title>
		<link>https://xavki.blog/python-simplifier-switch-case-lambda/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Fri, 26 Oct 2018 12:49:41 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=533</guid>

					<description><![CDATA[<p><img width="512" height="512" src="https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563.jpeg 512w, https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563-150x150.jpeg 150w, https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563-300x300.jpeg 300w" sizes="auto, (max-width: 512px) 100vw, 512px" />#python #linux #100DaysOfCode #developper #lambda</p>
<p>A faire découvrir pour simplifier son code python.</p>
<p>Commetn simplifier  un switch case avec des lambda ?</p>
<p>L’article <a href="https://xavki.blog/python-simplifier-switch-case-lambda/">[Python] : comment simplifier vos switch case avec la fonction lambda ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="512" height="512" src="https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563.jpeg 512w, https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563-150x150.jpeg 150w, https://xavki.blog/wp-content/uploads/2018/08/cropped-cropped-pexels-photo-818563-300x300.jpeg 300w" sizes="auto, (max-width: 512px) 100vw, 512px" /><p>Lambda, un mot qui peut faire peur pour les débutants en python. Pourtant les fonctions anonymes lambda permettent de simplifier le code et de le rendre plus compact. Certe leur lecture nécessite un peu de pratique mais elles réduisent la longueur de vos scripts.</p>
<p>En voici encore un exemple avec le classique switch/case. Python n&#8217;est pas équipé d&#8217;outils spécifique comme bash, php ou autres&#8230; Du coup il faut passer par le classique &#8220;If &#8230; elseif &#8230; else&#8221;. C&#8217;est dommage et je dirais que c&#8217;est presque moche non ?</p>
<p>C&#8217;est là que labda le vengeur masqué intervient et va nous réduire et embellir tout cela.</p>
<p>Voyons le cas classique dans un premier temps</p>
<pre>def sans_lambda(op, a, b):
    if op == 'addition':
        return a + b
    elif op == 'soustraction':
        return a - b
    elif op == 'multiplication':
        return a * b
    elif op == 'division':
        return a / b
    else:
        return None
</pre>
<p>Et maintenant avec lambda :</p>
<pre>def avec_lambda(op, c, d):
    return {
        'addition': lambda: c + d,
        'soustraction': lambda: c - d,
        'multiplication': lambda: c * d,
        'division': lambda: c / d,
    }.get(op, lambda: None)()
</pre>
<p>Vous le voyez avec lambda c&#8217;est mieux. Une lambda pour chaque cas. On intègre directement cela dans le return.</p>
<p>L’article <a href="https://xavki.blog/python-simplifier-switch-case-lambda/">[Python] : comment simplifier vos switch case avec la fonction lambda ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] : comment requêter une base mysql avec mysql.connector ?</title>
		<link>https://xavki.blog/python-comment-requeter-une-base-mysql-avec-mysql-connector/</link>
					<comments>https://xavki.blog/python-comment-requeter-une-base-mysql-avec-mysql-connector/#comments</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Fri, 19 Oct 2018 08:56:28 +0000</pubDate>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://xavki.wordpress.com/?p=419</guid>

					<description><![CDATA[<p><img width="1280" height="662" src="https://xavki.blog/wp-content/uploads/2018/08/mysql-svg.png" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/08/mysql-svg.png 1280w, https://xavki.blog/wp-content/uploads/2018/08/mysql-svg-300x155.png 300w, https://xavki.blog/wp-content/uploads/2018/08/mysql-svg-768x397.png 768w, https://xavki.blog/wp-content/uploads/2018/08/mysql-svg-1024x530.png 1024w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />Mysql Connector est le module le plus répandu pour utiliser une base de données mysql à partir de python. Il est relativement facile à utiliser. Nous aurons l&#8217;occasion de voir dans d&#8217;autres articles des manipulations plus complexes mais il faut... <a href="https://xavki.blog/python-comment-requeter-une-base-mysql-avec-mysql-connector/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-comment-requeter-une-base-mysql-avec-mysql-connector/">[Python] : comment requêter une base mysql avec mysql.connector ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="1280" height="662" src="https://xavki.blog/wp-content/uploads/2018/08/mysql-svg.png" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/08/mysql-svg.png 1280w, https://xavki.blog/wp-content/uploads/2018/08/mysql-svg-300x155.png 300w, https://xavki.blog/wp-content/uploads/2018/08/mysql-svg-768x397.png 768w, https://xavki.blog/wp-content/uploads/2018/08/mysql-svg-1024x530.png 1024w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /><p>Mysql Connector est le module le plus répandu pour utiliser une base de données mysql à partir de python. Il est relativement facile à utiliser. Nous aurons l&#8217;occasion de voir dans d&#8217;autres articles des manipulations plus complexes mais il faut bien commencer par&#8230; le commencement.</p>
<p>Comment réaliser un simple SELECT et afficher son résultat en Python ? voici comment faire si vous êtes débutant.</p>
<pre>import mysql.connector  madatabase = mysql.connector.connect(   host="localhost",   user="nom_utilisateur",   passwd="mon_password",   database="mabase" )  session = madatabase.cursor() sql = "SELECT * FROM matable;" session.execute(sql)  resultat = session.fetchall()  for x in resultat:   print(x)  session.close() </pre>
<p>Donc quelles commandes avons nous passé ?</p>
<ul>
<li>import du module</li>
<li>création d&#8217;une instance madatabase avec les paramètres de connexion. C&#8217;est tout à fait classique on retrouve cela avec de nombreux modules de moteurs de bases de données</li>
<li>ouverture d&#8217;une connexionavec l&#8217;instanciation de la classe cursor</li>
<li>la variable sql contient la requête à passer</li>
<li>on lance la requête avec notre variable</li>
<li>on récupère tous les résultats (sous forme de liste)</li>
<li>il ne reste plus qu&#8217;à parcourir la liste</li>
<li>et on oublie pas de dire au revoir et merci au serveur en fermant la session</li>
</ul>
<p>Vous pouvez d&#8217;ores et déjà retrouver plus d&#8217;infos en ligne sur le site mysql et <a href="https://dev.mysql.com/doc/connector-python/en/">sa rubrique dédiée à ce module Python</a>.</p>
<p>L’article <a href="https://xavki.blog/python-comment-requeter-une-base-mysql-avec-mysql-connector/">[Python] : comment requêter une base mysql avec mysql.connector ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/python-comment-requeter-une-base-mysql-avec-mysql-connector/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>[Python] : comment charger des datas en base de données mysql avec mysql.connector ?</title>
		<link>https://xavki.blog/python-comment-charger-des-datas-en-base-de-donnees-mysql-avec-mysql-connector/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Wed, 10 Oct 2018 14:40:10 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://xavki.wordpress.com/?p=416</guid>

					<description><![CDATA[<p><img width="680" height="459" src="https://xavki.blog/wp-content/uploads/2018/07/python-logo.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python-logo.jpg 680w, https://xavki.blog/wp-content/uploads/2018/07/python-logo-300x203.jpg 300w" sizes="auto, (max-width: 680px) 100vw, 680px" />Revenons à nos pythons. Objectif du jour faire découvrir comment charger des données dans une base mysql à partir du module mysql.connector ? Extrêmement facile. Vous me direz c&#8217;est normal car c&#8217;est le but des modules de python. Premier cas... <a href="https://xavki.blog/python-comment-charger-des-datas-en-base-de-donnees-mysql-avec-mysql-connector/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-comment-charger-des-datas-en-base-de-donnees-mysql-avec-mysql-connector/">[Python] : comment charger des datas en base de données mysql avec mysql.connector ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="680" height="459" src="https://xavki.blog/wp-content/uploads/2018/07/python-logo.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python-logo.jpg 680w, https://xavki.blog/wp-content/uploads/2018/07/python-logo-300x203.jpg 300w" sizes="auto, (max-width: 680px) 100vw, 680px" /><p>Revenons à nos pythons. Objectif du jour faire découvrir comment charger des données dans une base mysql à partir du module mysql.connector ?</p>
<p>Extrêmement facile. Vous me direz c&#8217;est normal car c&#8217;est le but des modules de python.</p>
<p>Premier cas on va chercher une ligne simple :</p>
<pre># import du module
import mysql.connector

# paramètres de connexion à la base
mabase = mysql.connector.connect(
  host="localhost",
  user="monutilisateurdb",
  passwd="motdepassedb",
  database="madatabase"
)

cursor = mabase.cursor()

sql = "INSERT INTO matable (id, valeur) VALUES (%s, %s)"
data = [("1", "Xavki"),("2", "Pierre"),("3", "Jacques"),("4", "Paul")]
cursor.executemany(sql, data)

mabase.commit()
</pre>
<p>Donc là on vient d&#8217;inséré une ligne. Mais bon on veut en insérer plusieur voir mieux insérer une liste. Alors il faut utiliser &#8220;executemany&#8221; :</p>
<pre># import du module
import mysql.connector

# paramètres de connexion à la base
mabase = mysql.connector.connect(
  host="localhost",
  user="monutilisateurdb",
  passwd="motdepassedb",
  database="madatabase"
)

cursor = mabase.cursor()

sql = "INSERT INTO matable (id, valeur) VALUES (%s, %s)"
data = ("1", "Xavki")
cursor.execute(sql, data)

mabase.commit()
print(cursor.rowcount, " insérées") 
</pre>
<p>L’article <a href="https://xavki.blog/python-comment-charger-des-datas-en-base-de-donnees-mysql-avec-mysql-connector/">[Python] : comment charger des datas en base de données mysql avec mysql.connector ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] : comment inverser un string ou une phrase (ou une liste plus généralement) ?</title>
		<link>https://xavki.blog/python-comment-inverser-un-string-ou-une-phrase-ou-une-liste/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Mon, 08 Oct 2018 08:30:33 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://xavki.wordpress.com/?p=402</guid>

					<description><![CDATA[<p><img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" />C&#8217;est bref mais efficace avec python : comment inverser une liste ? ou une phrase ? Il suffit de savoir manipuler les listes et parcourir cette liste à l&#8217;envers. C&#8217;est quelque chose que doivent savoir faire les débutants. Il existe... <a href="https://xavki.blog/python-comment-inverser-un-string-ou-une-phrase-ou-une-liste/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-comment-inverser-un-string-ou-une-phrase-ou-une-liste/">[Python] : comment inverser un string ou une phrase (ou une liste plus généralement) ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" /><p>C&#8217;est bref mais efficace avec python : comment inverser une liste ? ou une phrase ? Il suffit de savoir manipuler les listes et parcourir cette liste à l&#8217;envers. C&#8217;est quelque chose que doivent savoir faire les débutants.</p>
<p>Il existe toutefois 2 méthodes.</p>
<p>La première c&#8217;est d&#8217;utiliser les plage d&#8217;index et de partir par la fin comme ceci :</p>
<pre>
&gt;&gt;&gt; text="Salut tout le monde"
&gt;&gt;&gt; text[::-1]
'ednom el tuot tulaS'
</pre>
<p>Terriblement efficace.</p>
<p>Sinon il y a la méthode par les méthodes lol avec reversed qui s&#8217;applique aux listes.</p>
<pre>
&gt;&gt;&gt; text="Salut tout le monde"
&gt;&gt;&gt; "".join(reversed(text))
'ednom el tuot tulaS'
</pre>
<p>N&#8217;hésitez pas à partager en commentaires vos astuces !</p>
<p>L’article <a href="https://xavki.blog/python-comment-inverser-un-string-ou-une-phrase-ou-une-liste/">[Python] : comment inverser un string ou une phrase (ou une liste plus généralement) ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Ansible] : lister les variables de rôles non documentées dans le README.md</title>
		<link>https://xavki.blog/ansible-lister-les-variables-de-roles-non-documentees-dans-le-readme-md/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Wed, 03 Oct 2018 08:00:12 +0000</pubDate>
				<category><![CDATA[Ansible]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://xavki.wordpress.com/?p=365</guid>

					<description><![CDATA[<p>Les rôles de ansible sont plus ou moins faciles à utiliser. Un des principaux facteurs limitants, c&#8217;est la documentation du README. Du coup j&#8217;ai créé un petit script pour lister les variables de vos rôles et ensuite vérifier si ces... <a href="https://xavki.blog/ansible-lister-les-variables-de-roles-non-documentees-dans-le-readme-md/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/ansible-lister-les-variables-de-roles-non-documentees-dans-le-readme-md/">[Ansible] : lister les variables de rôles non documentées dans le README.md</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Les rôles de ansible sont plus ou moins faciles à utiliser. Un des principaux facteurs limitants, c&#8217;est la documentation du README. Du coup j&#8217;ai créé un petit script pour lister les variables de vos rôles et ensuite vérifier si ces variables sont bien documentées dans le README.md (si vous avez d&#8217;autres idées n&#8217;hésitez pas).</p>
<pre>#!/usr/bin/python3
  # coding: utf8 
  import re import os
 def list_variables (pattern, dir):     
  variables=[]     
  r = re.compile(pattern)     
  for parent, dnames, fnames in os.walk(dir):  
       for fname in fnames:
             filename = os.path.join(parent, fname) 
            if os.path.isfile(filename):
                 with open(filename,encoding="latin-1") as f: 
                    for line in f:
                         if r.search(line):
                           reg=r"pattern"
                           for item in re.findall(r''+pattern+'',line):
                             if item not in variables: 
                              variables.append(item) 
  return variables  

# lister les roles
 def list_roles (dir):
         roles=[]
         regexp = re.compile(r'.*\/roles\/[a-z0-1_-]+$') 
        for dirname, dirnames, filenames in os.walk('.'): 
                for subdirname in dirnames:
                         rep=os.path.join(dirname, subdirname)
                         if regexp.search(rep):
                                 roles.append(rep) 
        return roles
 
 # avec la fonction grep on liste toutes les variables contenant un _ 

for role in list_roles("."):
     r = re.compile('[.]?roles/(.*)')
     match = r.search(role) 
    print("") 
    print("#################################################################")
     print("         Analyse du role : "+ match.group(1)) 
    print("#################################################################")     compteur=0
     list_var=list_variables("\{\{\s?([a-z]+[_]+[a-z_]+)\s?\}\}",role)
     for variable in list_var: 
        compteur+=1
         with open(roles+"/README.md",encoding="latin-1") as f:
             concaten="" 
            for line in f:
                 concaten+=line
             if not re.search(variable,concaten):
                 print("Variable à éditer :"+variable)
     print(" = "+str(compteur)+" variable(s) analysé(es)")
</pre>
<p>Explications :</p>
<ul>
<li> une fonction qui liste les variables ansible :</li>
<li>
<ul>
<li>on parcourt les directories (à l&#8217;aide du module OS de python)</li>
</ul>
</li>
<li>
<ul>
<li>et avec une regex on applique un pattern pour retrouver ce qui ressemble à une variable ({{ variable }}</li>
</ul>
</li>
<li>
<ul>
<li>enfin on met tout cela dans un tableau bien propre</li>
</ul>
</li>
<li>une fonction qui liste les rôles :</li>
<li>
<ul>
<li>idem on parcourt les directories et on cherche les répertoires contenus dans &#8220;roles&#8221;</li>
</ul>
</li>
<li>
<ul>
<li>à l&#8217;aide d&#8217;une regex on nettoie le nom du rôle</li>
</ul>
</li>
<li>Pour finir on orchestre tout cela :</li>
<li>
<ul>
<li>on boucle sur la liste des variables</li>
</ul>
</li>
<li>
<ul>
<li>on ouvre le README.md que l&#8217;on place dans une variable simple(on concatène les lignes)</li>
</ul>
</li>
<li>
<ul>
<li>et on y cherche la variable</li>
</ul>
</li>
<li>
<ul>
<li>si elle n&#8217;est pas dedans on affiche qu&#8217;elle est à éditer</li>
</ul>
</li>
<li>
<ul>
<li>et pour finir on affiche à la fin de chaque rôle le nombre de variables analysées.</li>
</ul>
</li>
</ul>
<p>Si vous voyez d&#8217;autres scripts de ce genre qui pourrait être utiles indiquez le en commentaire j&#8217;y jeterez un coup d&#8217;oeil.</p>
<p>L’article <a href="https://xavki.blog/ansible-lister-les-variables-de-roles-non-documentees-dans-le-readme-md/">[Ansible] : lister les variables de rôles non documentées dans le README.md</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] : un mot sur les listes ? boucles for&#8230;</title>
		<link>https://xavki.blog/python-un-mot-sur-les-listes-boucles-for/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Tue, 18 Sep 2018 09:44:46 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=502</guid>

					<description><![CDATA[<p><img width="1880" height="1255" src="https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-768x513.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-1024x684.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-1568x1047.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" />Les listes en python permettent de laisser place à toute votre imagination. De nombreuses astuces permettent d&#8217;alimenter une liste ou encore de la parcourir avec les slices, les ranges ou autres. Je n&#8217;ai pas le niveau pour prétendre faire le... <a href="https://xavki.blog/python-un-mot-sur-les-listes-boucles-for/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-un-mot-sur-les-listes-boucles-for/">[Python] : un mot sur les listes ? boucles for&#8230;</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="1880" height="1255" src="https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-768x513.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-1024x684.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/06/pexels-photo-1181671-1568x1047.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" /><p>Les listes en python permettent de laisser place à toute votre imagination. De nombreuses astuces permettent d&#8217;alimenter une liste ou encore de la parcourir avec les slices, les ranges ou autres.</p>
<p>Je n&#8217;ai pas le niveau pour prétendre faire le tour de la question mais j&#8217;ai envie de partager mon expérience à ce sujet. En effet, un peu d&#8217;expérience dans ce domaine permet de gagner du temps, de simplifier son code et tout simplement de progresser.</p>
<h2>Création d&#8217;une liste le plus simplement du monde<strong><br />
</strong></h2>
<p>Définir et alimenter une liste en premier lieu c&#8217;est :</p>
<pre>&gt;&gt;&gt; liste=['B','o','n','j','o','u','r']
</pre>
<p>Ensuite lorsque l&#8217;on débute on réalise ce genre d&#8217;opération :</p>
<pre>&gt;&gt;&gt; texte="Bonjour Xavki"
&gt;&gt;&gt; liste=[]
&gt;&gt;&gt; for i in texte:liste.append(i)
&gt;&gt;&gt; print(liste)
['B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'X', 'a', 'v', 'k', 'i']
</pre>
<p>Avec la fonction append, on a ajouté chaque caractère à la liste. En outre, la variable texte fait aussi office de liste et est utilisable comme telle.</p>
<h2>Liste  créée et définie en une ligne avec for intégré<strong><br />
</strong></h2>
<pre>&gt;&gt;&gt; print(texte)
Bonjour Xavki
&gt;&gt;&gt; a = [i for i in texte]
&gt;&gt;&gt; print(a)
['B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'X', 'a', 'v', 'k', 'i']
</pre>
<p>Là c&#8217;est déjà plus sympa.</p>
<p>Et puis on peut aller plus loin si nécessaire et y placer des conditions avec &#8220;if&#8221;.</p>
<pre>&gt;&gt;&gt; a = [i for i in texte if i == "o"]
&gt;&gt;&gt; print(a)
['o', 'o']
</pre>
<h2>Faire d&#8217;une liste de liste&#8230; une unique liste</h2>
<p>Ce cas se présente souvent, vous avez une liste de liste et vous souhaitez n&#8217;en faire qu&#8217;une simple liste. Faire cette opération peut se révéler un peu fastidieux car il faut faire deux boucle for et ajouter les éléments avec un append dans notre  liste finale.</p>
<p>Bref voici comment se simplifier la vie et mieux comprendre ce principe d&#8217;alimentation des listes. Et avec ça vous aller devenir de vraies oneliners (la frime lol).</p>
<pre>&gt;&gt;&gt; texte = [['B','o','n'], ['j','o','u','r']]
&gt;&gt;&gt; print(texte)
[['B', 'o', 'n'], ['j', 'o', 'u', 'r']]
&gt;&gt;&gt; liste=[txt for tmp in texte for txt in tmp]
&gt;&gt;&gt; print(liste)
['B', 'o', 'n', 'j', 'o', 'u', 'r']
</pre>
<p>Vous me direz cela n&#8217;empêche pas de faire deux boucles mais tout cela prend peu de lignes.</p>
<p>Et donc si vous avez compris les &#8220;for&#8221; empilés voici la même chose avec un niveau supplémentaire.</p>
<pre>&gt;&gt;&gt; texte = [['B','o','n'], ['j','o','u','r'],[' ',['X','a','v','k','i']]]
&gt;&gt;&gt; liste=[i for tmp in texte for txt in tmp for i in txt]
&gt;&gt;&gt; print(liste)
['B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'X', 'a', 'v', 'k', 'i']
</pre>
<p>&nbsp;</p>
<p>L’article <a href="https://xavki.blog/python-un-mot-sur-les-listes-boucles-for/">[Python] : un mot sur les listes ? boucles for&#8230;</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] : comment lire les lignes d&#8217;un fichier tout simplement ? read et readline</title>
		<link>https://xavki.blog/python-comment-lire-les-lignes-dun-fichier-tout-simplement-read-et-readline/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Thu, 13 Sep 2018 07:50:15 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=497</guid>

					<description><![CDATA[<p><img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" />Python pour les débutants, c&#8217;est avant tout de savoir lire un fichier ligne à ligne. Évident pour certains mais lorsque l&#8217;on commence, il faut bien apprendre. Pour nous aider python possède deux fonctions ultra-utilisées : read et readline. Je pense... <a href="https://xavki.blog/python-comment-lire-les-lignes-dun-fichier-tout-simplement-read-et-readline/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-comment-lire-les-lignes-dun-fichier-tout-simplement-read-et-readline/">[Python] : comment lire les lignes d&#8217;un fichier tout simplement ? read et readline</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" /><p>Python pour les débutants, c&#8217;est avant tout de savoir lire un fichier ligne à ligne. Évident pour certains mais lorsque l&#8217;on commence, il faut bien apprendre.</p>
<p>Pour nous aider python possède deux fonctions ultra-utilisées : read et readline. Je pense que les deux sont inséparables.</p>
<p>Pour faire lire des lignes ou même en écrire de manière simple, vous pouvez aussi vous reporter à <a href="https://xavki.blog/2018/08/29/python-lire-et-ecrire-facilement-dans-un-fichier-avec-pathlib/">cet article précédent sur le module PATHLIB</a>.</p>
<p>Read c&#8217;est l&#8217;équivalent de readline mais aux caractères. Ainsi, il permet d&#8217;afficher caractère par caractère le contenu d&#8217;une variable. Par exemple :</p>
<pre>#notre fichier contient 
première ligne
 deuxième ligne
 troisième ligne  

&gt;&gt;&gt; fichier = open("texte.txt")
 &gt;&gt;&gt; fichier.close() 
&gt;&gt;&gt; print(fichier.read(1)) 
p
&gt;&gt;&gt; print(fichier.read(1))
 r
&gt;&gt;&gt; print(fichier.read())
 première ligne 
deuxième ligne 
troisième ligne
</pre>
<p>On affiche donc le premier caractère de la première ligne. Read fonctionne donc par caractère et au fur et à mesure le curseur avance d&#8217;un caractère. Le paramètre pris par read est aussi le pas d&#8217;avancement du curseur. Si aucun paramètre n&#8217;est passé c&#8217;est tout l&#8217;élément qui est affiché. On peut donc afficher un fichier en faisant un simple read().</p>
<p>Readline c&#8217;est la même chose mais non pas en caractère mais en ligne comme son nom l&#8217;indique.</p>
<pre>&gt;&gt; print(fichier.readlines()) [
'première ligne\n',
'deuxième ligne\n',
'troisième ligne\n'
]</pre>
<p>Readlines produit donc une liste consultable comme tout autre liste&#8230; en la parcourant.</p>
<pre>&gt;&gt;&gt; fichier = open("texte.txt") &gt;&gt;&gt; for ligne in fichier.readlines(): ...     print(ligne) première ligne deuxième ligne troisième ligne</pre>
<p>Kool non ? donc deux méthodes pour récupérer le contenu d&#8217;un fichier mais on n&#8217;en fera pas la même chose :</p>
<ul>
<li>read() : pour afficher tout le fichier ou le récupérer dans une seule variable</li>
<li>readlines() : pour l&#8217;utiliser ligne à ligne ou dans un tableau.</li>
</ul>
<p>&nbsp;</p>
<p>L’article <a href="https://xavki.blog/python-comment-lire-les-lignes-dun-fichier-tout-simplement-read-et-readline/">[Python] : comment lire les lignes d&#8217;un fichier tout simplement ? read et readline</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] : comment logger dans vos scripts avec logging ?</title>
		<link>https://xavki.blog/python-comment-logger-dans-vos-scripts-avec-logging/</link>
					<comments>https://xavki.blog/python-comment-logger-dans-vos-scripts-avec-logging/#comments</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Tue, 11 Sep 2018 11:12:22 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=493</guid>

					<description><![CDATA[<p><img width="1880" height="1255" src="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-768x513.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-1024x684.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-1568x1047.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" />Python est bien équipé en matière de modules. Une fois de plus, il nous met à disposition le nécessaire pour faire simplement les choses. Logguer est une nécessité pour savoir si vos scripts et vos applications se portent bien, pour... <a href="https://xavki.blog/python-comment-logger-dans-vos-scripts-avec-logging/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-comment-logger-dans-vos-scripts-avec-logging/">[Python] : comment logger dans vos scripts avec logging ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="1880" height="1255" src="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-768x513.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-1024x684.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-1181671-1568x1047.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" /><p>Python est bien équipé en matière de modules. Une fois de plus, il nous met à disposition le nécessaire pour faire simplement les choses. Logguer est une nécessité pour savoir si vos scripts et vos applications se portent bien, pour suivre les résultats et superviser.</p>
<p>Avec logging, vous pourrez logger en mettant en forme vos logs en les paramétrant de différentes manières pour vous faciliter la vie. Logging permet de structurer, hierarchiser, écrire vos logs.</p>
<p>Voici ce que j&#8217;utilise de mon côté :</p>
<pre>import logging
import sys

# create logger
logging.basicConfig(filename='/var/log/script.log',format='%(asctime)s - %(name)s - %(levelname)s &gt;&gt;&gt;&gt; %(message)s',level=logging.DEBUG)
logger = logging.getLogger('script python xavki')
logger.addHandler(logging.StreamHandler(sys.stdout))

if __name__ == "__main__":
  try:
     logger.info('Action 1 [OK]')
  except:
     logger.warning('Action 1 [KO]')

</pre>
<p>Alors voici ce que nous avons fait :</p>
<ul>
<li>import des modules logging et sys</li>
<li>instanciation du logger
<ul>
<li>le fichier de log et sa localisation</li>
<li>le format (date / nom / niveau de log / message)</li>
<li>ajout d&#8217;un handler qui permet de logger également sur stdout (on log donc dans un fichier et à l&#8217;écran)</li>
</ul>
</li>
<li>dans le try (cas de réussite) : lancement du script et log pour dire [OK]</li>
<li>dans le except (cas d&#8217;erreur) : log pour dire [KO]</li>
</ul>
<p>Et le résultat :</p>
<pre>2018-08-19 22:10:26,620 - script python xavki - INFO - Action 1 [OK]
2018-08-19 22:10:26,695 - script python xavki - WARNING - Action 1 [KO]
</pre>
<p>A vous ensuite d&#8217;organiser la hiérarchie de vos log :</p>
<ul>
<li>info</li>
<li>warning</li>
<li>debug</li>
<li>error</li>
<li>critical</li>
</ul>
<p>Si votre configuration vous semble un peu complexe et pour homogénéiser plus facilement votre conf logging, utilisez un fichier de conf (format ini ou yaml).</p>
<pre>logging.config.fileConfig('logging.conf')
</pre>
<p>Vous pouvez consulter <a href="https://docs.python.org/2/library/logging.html">la page de doc python pour en savoir plus</a>. Sachez qu&#8217;il est aussi possible <a href="http://mynthon.net/howto/-/python/python%20-%20logging.SMTPHandler-how-to-use-gmail-smtp-server.txt">de logger par mail en smtp</a>.</p>
<p>L’article <a href="https://xavki.blog/python-comment-logger-dans-vos-scripts-avec-logging/">[Python] : comment logger dans vos scripts avec logging ?</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/python-comment-logger-dans-vos-scripts-avec-logging/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>[Python][Bash] : comment piper (combiner) du bash dans du python -c en une ligne ? façon oneliner</title>
		<link>https://xavki.blog/python-bash-comment-piper-combiner-du-bash-dans-du-python-c-en-une-ligne/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Thu, 06 Sep 2018 09:42:42 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=434</guid>

					<description><![CDATA[<p><img width="1880" height="1253" src="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-768x512.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-1024x682.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-1568x1045.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" />Peut-être un peu pour la frime et d&#8217;autres pour tester certainement. Nombreux sommes nous à vouloir faire un truc bizare en combinant, comme le fait si bien perl, du bash et du python. Mais python n&#8217;est pas un animal facile.... <a href="https://xavki.blog/python-bash-comment-piper-combiner-du-bash-dans-du-python-c-en-une-ligne/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-bash-comment-piper-combiner-du-bash-dans-du-python-c-en-une-ligne/">[Python][Bash] : comment piper (combiner) du bash dans du python -c en une ligne ? façon oneliner</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="1880" height="1253" src="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101.jpeg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101.jpeg 1880w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-300x200.jpeg 300w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-768x512.jpeg 768w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-1024x682.jpeg 1024w, https://xavki.blog/wp-content/uploads/2018/07/pexels-photo-943101-1568x1045.jpeg 1568w" sizes="auto, (max-width: 1880px) 100vw, 1880px" /><p>Peut-être un peu pour la frime et d&#8217;autres pour tester certainement. Nombreux sommes nous à vouloir faire un truc bizare en combinant, comme le fait si bien perl, du bash et du python. Mais python n&#8217;est pas un animal facile. Vous allez le voir il faut faire preuve d&#8217;imagination.</p>
<p>Voici par exemple comment faire un cat et le reprendre dans python pour extraire.</p>
<pre>cat /var/log/syslog | python -c "import sys;
import re;
reg=re.compile('(21:.*)');
[ligne for ligne in sys.stdin if sys.stdout.write(reg.search(ligne).group(1))+'\n']"
</pre>
<p>C&#8217;est chaud un peu non ?</p>
<p>Expliquons ce &#8220;oneline&#8221;, un peu tiré par les cheveux :</p>
<ul>
<li>le cat on revient pas dessus avec un pipe pour passer les données à la commande suivante</li>
<li>python -c : -c pour passer des commandes (on est pas dans un fichier de script)</li>
<li>import sys : pour le module système</li>
<li>import re : pour les regex</li>
<li>re.compile pour compiler le pattern de la regex</li>
<li>ensuite on récupère ligne par ligne sys.stdin (la sortie stdin correspond au pipe du cat)</li>
<li>puis on écrit dans stdout le résultat de la regex (group 1)</li>
</ul>
<p>On peut faire un peu plus simple par exemple pour reprendre un cat :</p>
<pre>ps aux | python -c "import sys; print sys.stdin.read()"
</pre>
<p>Alors est-ce que vous êtes toujours chaud pour faire du one line avec Python ? un peu moins ? Perso je préfère largement perl pour faire ce genre d&#8217;action si nécessaire. Awk est aussi pas mal dans son genre.</p>
<pre>## en perl :
cat /var/log/syslog |
perl -nle 'm{(21.*)} and print $1'

## en awk
cat /var/log/syslog |
awk 'match($0, /(21.*)/){print substr($0, RSTART, RLENGTH)}'
</pre>
<p>Il faut savoir qu&#8217;il existe <a href="http://jagt.github.io/python-single-line-convert/">aussi des scripts python qui permettent de simplifier le travail</a> mais bon c&#8217;est pas classe intellectuellement lol.</p>
<p>et vous vous pratiquez ce genre de commande ? partagez vos oneline</p>
<p>L’article <a href="https://xavki.blog/python-bash-comment-piper-combiner-du-bash-dans-du-python-c-en-une-ligne/">[Python][Bash] : comment piper (combiner) du bash dans du python -c en une ligne ? façon oneliner</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Python] :comment créer une fonction pour lancer vos regex ? (exemple : capture d&#8217;une ip)</title>
		<link>https://xavki.blog/python-comment-creer-une-fonction-pour-lancer-vos-regex-exemple-capture-dune-ip/</link>
					<comments>https://xavki.blog/python-comment-creer-une-fonction-pour-lancer-vos-regex-exemple-capture-dune-ip/#comments</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Tue, 04 Sep 2018 08:06:17 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://xavki.blog/?p=427</guid>

					<description><![CDATA[<p><img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" />Si vous développez un peu de script en python, vous vous rendrez compte que vous pouvez parfois appeler de très nombreuses fois le module regex et que à chaque fois (quasiment), vous devrez : compilez la regex (son pattern) appliquer... <a href="https://xavki.blog/python-comment-creer-une-fonction-pour-lancer-vos-regex-exemple-capture-dune-ip/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-comment-creer-une-fonction-pour-lancer-vos-regex-exemple-capture-dune-ip/">[Python] :comment créer une fonction pour lancer vos regex ? (exemple : capture d&#8217;une ip)</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" /><p>Si vous développez un peu de script en python, vous vous rendrez compte que vous pouvez parfois appeler de très nombreuses fois le module regex et que à chaque fois (quasiment), vous devrez :</p>
<ul>
<li>compilez la regex (son pattern)</li>
<li>appliquer une classe (search assez souvent)</li>
<li>si vous utilisez classe vous retournerez souvent la sous classe group(1)</li>
</ul>
<p>Ben oui c&#8217;est répétitif. En grosse faignasse, on fait des copier/coller au début&#8230; je sais je suis passé par là.</p>
<p>Bref si vous le faites une fois dans votre script ou site ça va mais ce n&#8217;est pas souvent le cas. Au -delà de 2 fois, il faut créer une fonction ya pas de lézard comme dirait l&#8217;autre.</p>
<p>Je vous propose cette petite fonction clef en main et adaptable bien sûr (ou pourrait par exemple lui passer un paramètre supplémentaire, le numéro de group).</p>
<pre>#on oublie pas l'import du module re

import re

#puis la fonction
def regex(reg,line):
        var=re.compile(reg)
        return var.search(line).group(1) if var.search(line) else ""

# que l'on utilise comme ceci
ip=regex("((([0-9]{1,3})(\.)){3}[0-9]{1,3})",ligne)

</pre>
<p>Donc un peu d&#8217;explication de code :</p>
<ul>
<li>on import re</li>
<li>on défini une fonction récupérant deux arguements
<ul>
<li>reg : le pattern</li>
<li>line : la ligne à analysée</li>
</ul>
</li>
<li>on compile la regex</li>
<li>on retourne :
<ul>
<li>si on trouve rien &#8220;&#8221; un vide</li>
<li>sinon la valeur de group(1)</li>
</ul>
</li>
</ul>
<p>Pour l&#8217;exemple, vous l&#8217;aurez reconnu c&#8217;est la capture d&#8217;une ip dans la variable ligne (à définir). Et vous comment faites vous ? j&#8217;imagine que certains font beaucoup mieux.</p>
<p>L’article <a href="https://xavki.blog/python-comment-creer-une-fonction-pour-lancer-vos-regex-exemple-capture-dune-ip/">[Python] :comment créer une fonction pour lancer vos regex ? (exemple : capture d&#8217;une ip)</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/python-comment-creer-une-fonction-pour-lancer-vos-regex-exemple-capture-dune-ip/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>[Python] : lire et écrire facilement dans un fichier avec PATHLIB &#8230; et un peu plus</title>
		<link>https://xavki.blog/python-lire-et-ecrire-facilement-dans-un-fichier-avec-pathlib/</link>
					<comments>https://xavki.blog/python-lire-et-ecrire-facilement-dans-un-fichier-avec-pathlib/#comments</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Wed, 29 Aug 2018 15:01:48 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://xavki.wordpress.com/?p=313</guid>

					<description><![CDATA[<p><img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" />PathLib est un module Python qui mérite d&#8217;être un peu plus connu. En effet, ce module permet de lire ou d&#8217;écrire dans un fichier en quelques lignes très courtes. Jusqu&#8217;ici pour lire un fichier il faut faire : alire =... <a href="https://xavki.blog/python-lire-et-ecrire-facilement-dans-un-fichier-avec-pathlib/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-lire-et-ecrire-facilement-dans-un-fichier-avec-pathlib/">[Python] : lire et écrire facilement dans un fichier avec PATHLIB &#8230; et un peu plus</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="480" height="271" src="https://xavki.blog/wp-content/uploads/2018/07/python.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" srcset="https://xavki.blog/wp-content/uploads/2018/07/python.jpg 480w, https://xavki.blog/wp-content/uploads/2018/07/python-300x169.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" /><p>PathLib est un module Python qui mérite d&#8217;être un peu plus connu. En effet, ce module permet de lire ou d&#8217;écrire dans un fichier en quelques lignes très courtes. Jusqu&#8217;ici pour lire un fichier il faut faire :</p>
<pre>alire = open("fichier.txt", "r")
for ligne in alire:
  print(ligne)

alire.close()
</pre>
<p>idem pour écrire :</p>
<pre>aecrire = open("fichier.txt", "a")
aecrire.write("Salut !!!")
aecrire.close()
</pre>
<p>Avec le module pathlib, les choses sont plu simples :</p>
<pre>from pathlib import Path
fichier = Path('fichier.txt')

#pour écrire
fichier.write_text("Pathlib is great")

#pour lire
print(fichier.read_text())
</pre>
<p>Voilà pour un exemple concernant la manipulation d&#8217;un fichier.</p>
<p>PathLib c&#8217;est aussi d&#8217;autres actions vous l&#8217;imaginez bien. Ce module vous permettra aussi d&#8217;agir sur les répertoires :</p>
<pre># vérifier l'existence du répertoire
Path('/home/xavki').exists()False

# créer le répertoire
Path('/home/xavki').mkdir()

# vérifier si l'objet est un répertoire
Path('/home/xavki').is_dir()</pre>
<p>PathLib c&#8217;est aussi parcourir facilement une arborescence  et y rechercher certains fichiers (exemple avec les fichiers sql du répertoire /home/xavki :</p>
<pre>[fichier for fichier in Path('/home/xavki').glob('*.sql')]</pre>
<p>Pour mémoire, le module &#8220;os&#8221; parcourt aussi les arbres avec &#8220;os.walk()&#8221;.</p>
<p>Et vous ? vous êtes plutôt &#8220;os&#8221; ou &#8220;pathlib&#8221; ?</p>
<p>L’article <a href="https://xavki.blog/python-lire-et-ecrire-facilement-dans-un-fichier-avec-pathlib/">[Python] : lire et écrire facilement dans un fichier avec PATHLIB &#8230; et un peu plus</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/python-lire-et-ecrire-facilement-dans-un-fichier-avec-pathlib/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>[Python] : le point sur les dictionnaires et ne pas confondre avec la liste</title>
		<link>https://xavki.blog/python-le-point-sur-les-dictionnaires-et-ne-pas-confondre-avec-liste/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Thu, 23 Aug 2018 08:14:07 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://xavki.wordpress.com/?p=421</guid>

					<description><![CDATA[<p><img width="130" height="89" src="https://xavki.blog/wp-content/uploads/2018/08/dictionnaire_python.png" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" />Actuellement, c&#8217;est un des points qui m&#8217;ennerve le plus sur Python : les dictionnaires, les listes et les tuples. Quand je crois avoir bien retenu qui est qui et bien je me remélange les pinceaux et je dois me refaire... <a href="https://xavki.blog/python-le-point-sur-les-dictionnaires-et-ne-pas-confondre-avec-liste/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/python-le-point-sur-les-dictionnaires-et-ne-pas-confondre-avec-liste/">[Python] : le point sur les dictionnaires et ne pas confondre avec la liste</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="130" height="89" src="https://xavki.blog/wp-content/uploads/2018/08/dictionnaire_python.png" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" loading="lazy" /><p>Actuellement, c&#8217;est un des points qui m&#8217;ennerve le plus sur Python : les dictionnaires, les listes et les tuples. Quand je crois avoir bien retenu qui est qui et bien je me remélange les pinceaux et je dois me refaire le point régulièrement. Alors lorsque quelqu&#8217;un me reparle de &#8220;tableau de hashage&#8221; et de &#8220;nested list&#8221; j&#8217;en oublie les dictionnaires.</p>
<p>Alors, ce n&#8217;est que mon avis, mais en python oubliez les tuples. C&#8217;est peu utilisé et il y a assez à faire avec les 2 autres.</p>
<h2>Quelques rappels sur les dictionnaires</h2>
<pre>dico = {   clef:valeur,   clef:valeur,   clef:valeur, } </pre>
<p>Donc un tableau de hashage comme certains appellent cela.</p>
<p>Un exemple ?</p>
<pre>age_personne = {   'Xavki':'32',   'Pierre':'40',   'Paul':'53',   'Jacques':'60', }  ou  age_personne = dict(   Xavki='32',   Pierre='40',   Paul='53',   Jacques='60', ) </pre>
<p>Contrairement au liste on ne peut pas appeler une clé/valeur par son index mais par sa clef :</p>
<pre>&gt;&gt;&gt; age_personne[1] Traceback (most recent call last):   File "", line 1, in  KeyError: 1  &gt;&gt;&gt; age_personne['Xavki'] '32' </pre>
<p>et pour entrer une valeur ou mettre à jour une valeur :</p>
<pre>age_personne['Xavki']=62 &gt;&gt;&gt; age_personne {'Xavki': 62, 'Paul': '53', 'Pierre': '40', 'Jacques': '60'} </pre>
<h2>Et mes listes ?</h2>
<p>Alors comment reproduire le système de clef des listes ? faire en sorte que la clef soit un indice :</p>
<pre>age_personne = {   '1':'32',   '2':'40',   '3':'53',   '4':'60', } </pre>
<p>Mais attention pas de slice comme dans les listes (c&#8217;est à dire d&#8217;utiliser des range d&#8217;index) et pas de append possible.</p>
<p>Pour le pratico pratique vous pouvez faire mieux avec les dictionnaires en y imbriquant des listes :</p>
<pre>age_personne = dict( Xavki=['32','informaticien','Paris'], Pierre=['40','manager','Tours'], Paul=['52','rh','Toulouse'], Jacques=['63','informaticien','Paris'], ) </pre>
<p>et là&#8230;. surprise :</p>
<pre>&gt;&gt;&gt; age_personne['Xavki'] ['32', 'informaticien', 'Paris']  &gt;&gt;&gt; age_personne['Xavki'][1] 'informaticien' </pre>
<p>C&#8217;est plus kool déjà.</p>
<p>Et en plus on peut utiliser des actions spécifiques :</p>
<pre>#on demande les résultats d'une clef avec get &gt;&gt;&gt; age_personne.get('Xavki') ['32', 'informaticien', 'Paris']  #on vide le dictionnaire age.personne.clear()  #on transforme un dictionnaire en "nested lit" liste_age=list(age_personne.items())  #on met dans une liste toutes les clefs list(age_personne.keys())  #pareil sur les valeurs list(age_personne.values())  #on supprime une clef age_personne.pop('Xavki') </pre>
<p>Comment alimenter simplement une liste ?</p>
<p>Soit on la créé avec des données que l&#8217;on peut entrer à la main facilement (en nombre limitées) :</p>
<pre>maliste = [1,2,3,4,5]</pre>
<p>Sinon on peut aussi utiliser les boucles for pour le faire :</p>
<pre>For i in range(1,5):  maliste.append(i)</pre>
<p>Ou encore lorsque l&#8217;on veut faire court et efficace :</p>
<pre>maliste = [ i for i in range(1,5) ]</pre>
<p>La dernière méthode est ma préférée pour éviter de mutliplier le nombre de lignes dans les scripts.</p>
<p>A votre tour de vous amuser. Avez vous des choses à ajouter ?</p>
<p>L’article <a href="https://xavki.blog/python-le-point-sur-les-dictionnaires-et-ne-pas-confondre-avec-liste/">[Python] : le point sur les dictionnaires et ne pas confondre avec la liste</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
