<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: pacdev</title>
    <description>The latest articles on Forem by pacdev (@pacdev).</description>
    <link>https://forem.com/pacdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F915760%2Fe6bb141f-4031-4734-b440-b141871ad935.jpeg</url>
      <title>Forem: pacdev</title>
      <link>https://forem.com/pacdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pacdev"/>
    <language>en</language>
    <item>
      <title>Jupyter notebook &amp; environnement virtuel</title>
      <dc:creator>pacdev</dc:creator>
      <pubDate>Tue, 30 Aug 2022 07:02:00 +0000</pubDate>
      <link>https://forem.com/pacdev/jupyter-notebook-environnement-virtuel-1ind</link>
      <guid>https://forem.com/pacdev/jupyter-notebook-environnement-virtuel-1ind</guid>
      <description>&lt;p&gt;👋 Pour tous mes projets python, je travaille avec un environnement virtuel. C'est assez simple à mettre en place:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt;&amp;gt; mkdir my_project
&amp;gt;&amp;gt; cd my_project
&amp;gt;&amp;gt; python3 -m venv venv
&amp;gt;&amp;gt; source venv/bin/activate
(venv) &amp;gt;&amp;gt;  pip install pandas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Une fois &lt;code&gt;venv&lt;/code&gt; activé 👌, toutes les commandes pip installeront les lib dans cet env. &lt;/p&gt;

&lt;p&gt;Si on travaille parfois avec &lt;code&gt;Jupyter Notebook&lt;/code&gt; on veut pouvoir utiliser notre environnement virtuel. Il suffit 🤷‍♂️ de faire:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(venv) &amp;gt;&amp;gt; pip install ipykernel
(venv) &amp;gt;&amp;gt; ipython kernel install --user --name=myproject
(venv) &amp;gt;&amp;gt; jupyter lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lorsqu'on ouvrira un prochain notebook, on peut choisir le nouvel environnement créé et renommé ici &lt;code&gt;my_project&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzgcr4wqwaoztij1iy9x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzgcr4wqwaoztij1iy9x.jpg" alt="venv dans jupyter"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;une commande que j'oublie souvent pour générer le fichier de config de jupyter&lt;br&gt;
&lt;code&gt;jupyter notebook --generate-config&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;⛵️&lt;/p&gt;

</description>
      <category>python</category>
      <category>jupyter</category>
    </item>
    <item>
      <title>Envie de contribuer à des projets open source sur Github ? (1/2)</title>
      <dc:creator>pacdev</dc:creator>
      <pubDate>Mon, 29 Aug 2022 17:45:00 +0000</pubDate>
      <link>https://forem.com/pacdev/envie-de-contribuer-a-des-projets-open-source-sur-github-12-1hcc</link>
      <guid>https://forem.com/pacdev/envie-de-contribuer-a-des-projets-open-source-sur-github-12-1hcc</guid>
      <description>&lt;h2&gt;
  
  
  Web scraping statique avec &lt;code&gt;BeautifulSoup&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Récemment j'ai cherché des projets open source auxquels contribuer. L'idéal pour commencer à contribuer est de trouver une issue avec le label &lt;code&gt;good first issue&lt;/code&gt;. L'ennui c'est qu'il faut parcourir chaque repo et aller voir dans les issues s'il y en a une avec ce label ou alors aller visiter directement l'url &lt;code&gt;https://github.com/{username}/{repo_name}/contribute&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Peut être que j'ai tout simplement mal cherché mais je n'ai pas trouvé de moyens dans github de lister tous les repos ayant ce genre d'issues en fonction d'un filtre de &lt;code&gt;topic&lt;/code&gt;. Je me suis donc servi de la deuxième méthode expliquée ci dessus et de la librairie &lt;a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/"&gt;BeautifulSoup&lt;/a&gt; pour parcourir automatiquement les repos filtrés par topic et lister les issues avec le label good first issue s'il y en a.&lt;/p&gt;

&lt;p&gt;cf. tweet 👇 &lt;/p&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pyI5XMmw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1562919831808212992/pu/img/s7CQN_y8lmINMw3C.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--04uol2lX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1369783934716874752/zYiesIzQ_normal.jpg" alt="P-A profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        P-A
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @_pacdev
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Looked for «good first issues» to contribute on &lt;a href="https://twitter.com/github"&gt;@github&lt;/a&gt; but didn’t find way to list them. I’ve built very simple web app to list them. &lt;a href="https://t.co/NiySdBRMYo"&gt;…t-issues-main-eqb5sc.streamlitapp.com&lt;/a&gt; hope it can help. Feel free to contribute &lt;a href="https://t.co/xCpkil94Jn"&gt;github.com/p-acDev/find-g…&lt;/a&gt; 🙏&lt;a href="https://twitter.com/streamlit"&gt;@streamlit&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/pythonprogramming"&gt;#pythonprogramming&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/github"&gt;#github&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/OpenSource"&gt;#OpenSource&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      21:48 PM - 25 Aug 2022
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1562919863433191424" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1562919863433191424" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1562919863433191424" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Ci dessous les quelques étapes qui permettent d'extraire les contenus des pages html:&lt;/p&gt;

&lt;p&gt;On créé un objet instance de la classe&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;html_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'html.parser'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;html_content&lt;/code&gt; est le contenu html de la page obtenu avec un &lt;code&gt;requests.get(url)&lt;/code&gt; par exemple&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sur cet objet &lt;code&gt;soup&lt;/code&gt; on applique les méthodes de la librairie. Il suffit de repérer dans sa page html statique, quelle est notre cible (&lt;code&gt;F12&lt;/code&gt;  par exemple pour obtenir le code source de la page).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MpRnGC11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6guj5i0uwnp7ps0i6ani.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MpRnGC11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6guj5i0uwnp7ps0i6ani.png" alt="Trouver la cible" width="880" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le résultat est une liste de dictionnaires qui contiennent les infos de cette balise en particulier. Pour obtenir le lien hypertext il suffit d'aller chercher le contenu href de chaque dictionnaire.&lt;/p&gt;

&lt;p&gt;👉 Plus de détail dans &lt;a href="https://github.com/p-acDev/find-good-first-issues.git"&gt;le répo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 N'hésitez pas à &lt;a href="https://github.com/p-acDev/find-good-first-issues/contribute"&gt;contribuer&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Web scraping dynamique
&lt;/h2&gt;

&lt;p&gt;Il y a un ennui. Cette librairie est un outil pour les pages statiques. On ne peut pas interagir avec le site. Quand on applique un filtre par &lt;code&gt;topic&lt;/code&gt; dans github explore, on ne récupère qu'une liste de quelques repos avec un bouton &lt;code&gt;load more&lt;/code&gt; à la fin&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GLwUE-1r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/njzwj8zce4216eaylfhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GLwUE-1r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/njzwj8zce4216eaylfhi.png" alt="Import dynamique nécessaire" width="880" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C'est un utilisateur github &lt;a href="https://github.com/AlexMihalache99"&gt;AlexMihalache99&lt;/a&gt; qui m'a orienté vers la solution&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/p-acDev/find-good-first-issues/issues/2#issuecomment-1229367429"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Comment for
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/AlexMihalache99"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--goUowoV1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars.githubusercontent.com/u/51009251%3Fu%3De089d3c724a7196b453bf0b8cb8ab60e25d9fb7a%26v%3D4" alt="AlexMihalache99 avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/AlexMihalache99"&gt;AlexMihalache99&lt;/a&gt;
        &lt;/strong&gt; commented on &lt;a href="https://github.com/p-acDev/find-good-first-issues/issues/2#issuecomment-1229367429"&gt;&lt;time&gt;Aug 28, 2022&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;BeautifulSoup is pulling data out of HTML and XML files.&lt;/p&gt;
&lt;p&gt;That means is a &lt;strong&gt;static&lt;/strong&gt; way of extracting data.
Because it is static it does not work on webpages that load the results dynamically, for example, your web page that has a &lt;strong&gt;load more&lt;/strong&gt; button instead of a page number bar.&lt;/p&gt;
&lt;p&gt;A solution for this is using a library that scrapes the data dynamically.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://selenium-python.readthedocs.io/" rel="nofollow"&gt;Selenium&lt;/a&gt; is such a library that might satisfy your needs.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/p-acDev/find-good-first-issues/issues/2#issuecomment-1229367429"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;h3&gt;
  
  
  MAJ avec &lt;a href="https://selenium-python.readthedocs.io"&gt;selenium&lt;/a&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;La suite dans une prochaine update&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>github</category>
    </item>
    <item>
      <title>Beans !</title>
      <dc:creator>pacdev</dc:creator>
      <pubDate>Sun, 28 Aug 2022 10:16:00 +0000</pubDate>
      <link>https://forem.com/pacdev/beans--2jja</link>
      <guid>https://forem.com/pacdev/beans--2jja</guid>
      <description>&lt;p&gt;Utilisation de pandas.groupby et de pandas.cut&lt;br&gt;
Imaginons qu'on ait un Dataframe représentant une time serie qui représente l'élévation du niveau d'eau et la direction de la houle à chaque pas de temps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#+BEGIN_SRC
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;random&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;rdn&lt;/span&gt;

&lt;span class="c1"&gt;# build fake dataframe
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'dir'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'elevation'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"df:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#+END_SRC
&lt;/span&gt;
&lt;span class="c1"&gt;#+RESULTS:
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
     &lt;span class="nb"&gt;dir&lt;/span&gt;  &lt;span class="n"&gt;elevation&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="mi"&gt;48&lt;/span&gt;   &lt;span class="mf"&gt;2.437835&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;     &lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mf"&gt;1.489722&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;130&lt;/span&gt;  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.576090&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="mi"&gt;169&lt;/span&gt;   &lt;span class="mf"&gt;2.721867&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mi"&gt;315&lt;/span&gt;  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.120620&lt;/span&gt;
&lt;span class="p"&gt;..&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;        &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;95&lt;/span&gt;  &lt;span class="mi"&gt;247&lt;/span&gt;  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.256091&lt;/span&gt;
&lt;span class="mi"&gt;96&lt;/span&gt;  &lt;span class="mi"&gt;301&lt;/span&gt;   &lt;span class="mf"&gt;2.014663&lt;/span&gt;
&lt;span class="mi"&gt;97&lt;/span&gt;  &lt;span class="mi"&gt;175&lt;/span&gt;   &lt;span class="mf"&gt;0.901548&lt;/span&gt;
&lt;span class="mi"&gt;98&lt;/span&gt;  &lt;span class="mi"&gt;289&lt;/span&gt;   &lt;span class="mf"&gt;2.903849&lt;/span&gt;
&lt;span class="mi"&gt;99&lt;/span&gt;   &lt;span class="mi"&gt;98&lt;/span&gt;  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.712153&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cela peut être fastidieux à lire. On peut vouloir lire les informations par secteur. On effectue alors un binning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#+BEGIN_SRC python
# create the bins
&lt;/span&gt;&lt;span class="n"&gt;bins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'dir'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;390&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;df_grp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s"&gt;'elevation'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"df_grp:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df_grp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#+END_SRC
&lt;/span&gt;
&lt;span class="c1"&gt;#+RESULTS:
&lt;/span&gt;&lt;span class="n"&gt;df_grp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
             &lt;span class="n"&gt;count&lt;/span&gt;      &lt;span class="n"&gt;mean&lt;/span&gt;       &lt;span class="n"&gt;std&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;       &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;       &lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;       &lt;span class="nb"&gt;max&lt;/span&gt;
&lt;span class="nb"&gt;dir&lt;/span&gt;                                    &lt;span class="p"&gt;...&lt;/span&gt;                              
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;       &lt;span class="mf"&gt;5.0&lt;/span&gt;  &lt;span class="mf"&gt;0.249184&lt;/span&gt;  &lt;span class="mf"&gt;1.670480&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;  &lt;span class="mf"&gt;0.605261&lt;/span&gt;  &lt;span class="mf"&gt;1.489722&lt;/span&gt;  &lt;span class="mf"&gt;1.771682&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;      &lt;span class="mf"&gt;6.0&lt;/span&gt;  &lt;span class="mf"&gt;0.530561&lt;/span&gt;  &lt;span class="mf"&gt;2.120228&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;  &lt;span class="mf"&gt;1.271229&lt;/span&gt;  &lt;span class="mf"&gt;2.242043&lt;/span&gt;  &lt;span class="mf"&gt;2.437835&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;     &lt;span class="mf"&gt;14.0&lt;/span&gt;  &lt;span class="mf"&gt;0.280099&lt;/span&gt;  &lt;span class="mf"&gt;1.937723&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;  &lt;span class="mf"&gt;1.548581&lt;/span&gt;  &lt;span class="mf"&gt;1.775393&lt;/span&gt;  &lt;span class="mf"&gt;2.223731&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;     &lt;span class="mf"&gt;9.0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.894609&lt;/span&gt;  &lt;span class="mf"&gt;1.444726&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.712153&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.239352&lt;/span&gt;  &lt;span class="mf"&gt;1.684734&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="mf"&gt;5.0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.542193&lt;/span&gt;  &lt;span class="mf"&gt;0.655393&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.576090&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.259147&lt;/span&gt;  &lt;span class="mf"&gt;0.374463&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="mf"&gt;11.0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.000794&lt;/span&gt;  &lt;span class="mf"&gt;1.906180&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.093552&lt;/span&gt;  &lt;span class="mf"&gt;1.132952&lt;/span&gt;  &lt;span class="mf"&gt;2.759483&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;210&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="mf"&gt;5.0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.104412&lt;/span&gt;  &lt;span class="mf"&gt;1.175992&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.471943&lt;/span&gt;  &lt;span class="mf"&gt;1.037076&lt;/span&gt;  &lt;span class="mf"&gt;1.221931&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;210&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;240&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="mf"&gt;11.0&lt;/span&gt;  &lt;span class="mf"&gt;0.447931&lt;/span&gt;  &lt;span class="mf"&gt;1.605676&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;  &lt;span class="mf"&gt;0.832420&lt;/span&gt;  &lt;span class="mf"&gt;1.552965&lt;/span&gt;  &lt;span class="mf"&gt;2.335645&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;240&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;270&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="mf"&gt;4.0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.556329&lt;/span&gt;  &lt;span class="mf"&gt;1.708697&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.300140&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.443048&lt;/span&gt;  &lt;span class="mf"&gt;1.996078&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;270&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="mf"&gt;12.0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.406191&lt;/span&gt;  &lt;span class="mf"&gt;1.708407&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.800965&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.041385&lt;/span&gt;  &lt;span class="mf"&gt;2.903849&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;330&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="mf"&gt;11.0&lt;/span&gt;  &lt;span class="mf"&gt;0.168334&lt;/span&gt;  &lt;span class="mf"&gt;1.585117&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;  &lt;span class="mf"&gt;0.135546&lt;/span&gt;  &lt;span class="mf"&gt;1.177059&lt;/span&gt;  &lt;span class="mf"&gt;2.553054&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;330&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="mf"&gt;7.0&lt;/span&gt;  &lt;span class="mf"&gt;0.411437&lt;/span&gt;  &lt;span class="mf"&gt;1.725589&lt;/span&gt;  &lt;span class="p"&gt;...&lt;/span&gt;  &lt;span class="mf"&gt;0.466246&lt;/span&gt;  &lt;span class="mf"&gt;1.667764&lt;/span&gt;  &lt;span class="mf"&gt;2.716199&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pour centrer autour de 0
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;condition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"dir"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;bin_size&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"dir"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;bin_size&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;df2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>Update de fichier</title>
      <dc:creator>pacdev</dc:creator>
      <pubDate>Fri, 26 Aug 2022 14:51:00 +0000</pubDate>
      <link>https://forem.com/pacdev/update-de-fichier-ii5</link>
      <guid>https://forem.com/pacdev/update-de-fichier-ii5</guid>
      <description>&lt;p&gt;Récemment pour une simulation CFD j'ai eu besoin de faire un offset de mes pièces 3D pour reproduire les pièces dans &lt;a href="https://www.openfoam.com/"&gt;OpenFoam&lt;/a&gt;. C'est l'occas' de mettre en place une modif automatique d'un fichier texte template.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;initial_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;reg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s"&gt;'vertex\s\s.+'&lt;/span&gt;

    &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;findall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;initial_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;found_reg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="c1"&gt;# take only the number
&lt;/span&gt;        &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;found_reg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# add something
&lt;/span&gt;        &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'x'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'y'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'z'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="n"&gt;initial_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;initial_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;found_reg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'vertex  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;initial_data&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'initialePos.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'r'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;initial_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# on which data to add offset
&lt;/span&gt;    &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;offset_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;initial_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'initialPos_offset.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'w'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;offset_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# initialPos.txt
facet normal -1.000000e+00  0.000000e+00  0.000000e+00
   outer loop
     vertex  0.000000e+00  6.666667e-02  0.000000e+00
     vertex  0.000000e+00  0.000000e+00  0.000000e+00
     vertex  0.000000e+00  0.000000e+00  6.666667e-02
   endloop
endfacet

# initialPos_offset.txt
facet normal -1.000000e+00  0.000000e+00  0.000000e+00
   outer loop
     vertex  6.00E+00  3.07E+00  0.00E+00
     vertex  6.00E+00  3.00E+00  0.00E+00
     vertex  6.00E+00  3.00E+00  6.67E-02
   endloop
endfacet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En fait c'est vraiment très basique. On se donne un fichier template dans lequel on va identifier un mot clé ou un pattern (faisable avec une regex). Ici le pattern à trouver est &lt;code&gt;reg = r'vertex\s\s.+'&lt;/code&gt;. Il suffit ensuite de définir par quoi on remplace ce qu'on a trouvé au niveau de la regex et on garde toute le reste.&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Data Model (__getitem__())</title>
      <dc:creator>pacdev</dc:creator>
      <pubDate>Fri, 26 Aug 2022 08:33:28 +0000</pubDate>
      <link>https://forem.com/pacdev/data-model-getitem-4fo</link>
      <guid>https://forem.com/pacdev/data-model-getitem-4fo</guid>
      <description>&lt;h2&gt;
  
  
  Data Model
&lt;/h2&gt;

&lt;p&gt;Quand dans un script Python on fait &lt;code&gt;my_object[i]&lt;/code&gt; c'est que l'objet &lt;code&gt;my_object&lt;/code&gt; est une instance d'une classe qui a une méthode spéciale &lt;code&gt;__getitem__(self)&lt;/code&gt; . Un exemple ci dessous.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sans la méthode spéciale
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Building&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n_flats&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__flats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_flats&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="err"&gt;​&lt;/span&gt;
&lt;span class="n"&gt;building&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Building&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt;​&lt;/span&gt;
&lt;span class="n"&gt;building&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [1], in &amp;lt;module&amp;gt;
      3         self.__flats = [i for i in range(n_flats)]
      5 building = Building(10)
----&amp;gt; 7 building[4]
​
TypeError: 'Building' object is not subscriptable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Avec
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Building&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n_flats&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__flats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_flats&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__getitem__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"You have selected the building #&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__flats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="err"&gt;​&lt;/span&gt;
&lt;span class="n"&gt;building&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Building&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt;​&lt;/span&gt;
&lt;span class="n"&gt;building&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'You have selected the building #4'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;L'utilisation de &lt;code&gt;'[i]'&lt;/code&gt; est un raccourcis de &lt;code&gt;my_object.__getitem__()&lt;/code&gt;. Une liste par exemple est une instance de classe qui a cette méthode implémentée&lt;/p&gt;

&lt;h3&gt;
  
  
  Source
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Fluent Python&lt;/strong&gt; - &lt;em&gt;Luciano Ramalho&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
    </item>
  </channel>
</rss>
