User Tools

Site Tools


python

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
python [2010/07/27 18:48] ginkopython [2014/09/13 14:03] (current) – [Recipes] ginko
Line 4: Line 4:
   * [[matplotlib]]   * [[matplotlib]]
   * [[astuces_python|Astuces]]   * [[astuces_python|Astuces]]
 +  * [[PyCONFR 2010]]
 +
  
 ===== Doc ===== ===== Doc =====
   * [[http://www.python.org/doc/current/|Doc python current]] (python.org)   * [[http://www.python.org/doc/current/|Doc python current]] (python.org)
 +  * [[http://docs.python.org/tutorial/index.html|Tutoriel officiel, très bien foutu]]
   * [[http://ginkobox.fr/docs/python-2.6.4-docs-html/|Doc python 2.6.4]] (local)   * [[http://ginkobox.fr/docs/python-2.6.4-docs-html/|Doc python 2.6.4]] (local)
   * [[http://ginkobox.fr/docs/python-2.6.4-docs-html.tar.bz2|Télécharger Doc python 2.6.4]] (local, tar.bz2)   * [[http://ginkobox.fr/docs/python-2.6.4-docs-html.tar.bz2|Télécharger Doc python 2.6.4]] (local, tar.bz2)
Line 12: Line 15:
   * [[http://diveintopython.adrahon.org/|DiveIntoPython fr]]   * [[http://diveintopython.adrahon.org/|DiveIntoPython fr]]
   * [[http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/toc/index.php|DiveIntoPython fr]] (developpez.com)   * [[http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/toc/index.php|DiveIntoPython fr]] (developpez.com)
 +
 ===== Basics ===== ===== Basics =====
   * [[http://docs.python.org/reference/simple_stmts.html|Simple statements]] (official doc)   * [[http://docs.python.org/reference/simple_stmts.html|Simple statements]] (official doc)
Line 17: Line 21:
   * [[http://docs.python.org/howto/unicode.html|HowTo Unicode]] (official doc)   * [[http://docs.python.org/howto/unicode.html|HowTo Unicode]] (official doc)
   * [[http://docs.python.org/howto/index.html|HowTo's]] (official doc)   * [[http://docs.python.org/howto/index.html|HowTo's]] (official doc)
 +===== Interactive Shell =====
 +Python est livré de base avec un shell interactif très utile. Mais il peut être utile de l'améliorer en ajoutant des petites objets custom aux petits oignons ou encore en utilisant des shells alternatifs comme ipython.
 +==== Objets custom ====
 +Il est possible d'ajouter des objets au shell via la variable d'environnement ''PYTHONSTARTUP=chemin_vers_le_fichier_python''.
 +Le namespace du shell contiendra alors tous les objets contenus dans le fichier indiqué.
 +
 +__Exemple__:<code python>def grep(pat, list, re=False):
 + """Works on list of strings.
 + When 're' argument is turned on, re.search is used instead of str.find."""
 + if re:
 + import re
 + def match(item):
 + if re.search(pat, item): return True
 + else: return False
 + else:
 + def match(item):
 + if item.find(pat) >= 0: return True
 + else: return False
 +
 + for item in list:
 + if match(item):
 + print item</code>
 +
 +NB: Ipython ne tient pas compte de ''PYTHONSTARTUP''. Pour charger des trucs custom, voir ipythonrc.
 +==== Ipython ====
 +Ipython est un shell interactif amélioré (coloration syntaxique, historique inter-instances, auto-complétion et autre goodies).
 +=== Cygwin ===
 +Pour lancer ipython sur Cygwin, taper simplement ''ipython'' dans le prompt causera une erreur ''bash: ... /usr/bin/python : Bad interpreteur : Permission Denied''.
 +
 +La solution la plus simple consiste à préférer ''ipython.bat'' pour lancer ipython. Un alias dans le .bashrc de cygwin permet de retrouver un jolie syntaxe.
 +=== ipythonrc ===
 +Valable pour iptyhon 0.10
 +
 +Ipython possède un système de fichiers de configuration à la UNIX. Dans la version 0.10, éditer ''ipy_user_conf.py'' situé dans le répertoire ''.ipython'' dans le $HOME.
 +Pour charger utiliser le ''PYTHONSTARTUP'', on peut y ajouter:
 +<code python>def import_pystartup():
 +    """Import custom function in shell from PYTHONSTARTUP.
 +    PYTHONSTARTUP is a environnement variable shared among different python shells."""
 +    import os
 +    filename = os.environ.get('PYTHONSTARTUP')
 +    if filename and os.path.isfile(filename):
 +        # execfile(filename) # Can't use builtin execfile function in ipython...
 + execf(filename)</code>
 +sans oublier d'appeler cette fonction dans le ''main''.
 ===== Unicode ===== ===== Unicode =====
   * [[http://docs.python.org/howto/unicode.html|HowTo]] (official doc)   * [[http://docs.python.org/howto/unicode.html|HowTo]] (official doc)
Line 33: Line 81:
   * [[http://docs.python.org/library/tkinter.html|Doc Python]]   * [[http://docs.python.org/library/tkinter.html|Doc Python]]
   * [[http://effbot.org/zone/tkinter-index.htm|Unofficial doc]]   * [[http://effbot.org/zone/tkinter-index.htm|Unofficial doc]]
 +===== WxWidget =====
 +  * [[http://sebsauvage.net/python/gui/index_fr.html|Tuto WxWidget/Tkinter]]
 +  * [[http://www.zetcode.com/wxpython/thetetrisgame/|Tetris game]]
 ===== Threading ===== ===== Threading =====
   * [[http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/|Basic threading tuto]]   * [[http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/|Basic threading tuto]]
Line 46: Line 97:
   * [[http://doc.ubuntu-fr.org/ipython|IPython, le python shell improved]]   * [[http://doc.ubuntu-fr.org/ipython|IPython, le python shell improved]]
   * [[http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/power_of_introspection/and_or.php|L'astuce and/or]]   * [[http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/power_of_introspection/and_or.php|L'astuce and/or]]
 +  * [[http://www.siafoo.net/article/56|Type checking in Python]] 
 +===== Best practices ===== 
 +  * [[http://www.canonical.org/~kragen/isinstance/|Do not use isinstance()]] 
 +===== Programmation événementielle ===== 
 +  * [[http://en.wikipedia.org/wiki/Twisted_%28software%29|Twisted]] (framework réseau, supporte de nombreux protocoles) 
 +  * [[http://www.gevent.org/|Gevent]] (framework réseau également, supporte moins de choses, mais plus léger que Twisted) 
 +  * [[http://code.google.com/p/gevent/wiki/ProjectsUsingGevent|Projets basés sur Gevent]] 
 +  * [[http://bitbucket.org/denis/gevent/src/tip/examples/concurrent_download.py#cl-4|Exemple simple d'utilisation de Gevent]] 
 +===== Profilage, optimisation et performances ===== 
 +  * [[python_tuning|Tuning python]]
 ===== Recipes ===== ===== Recipes =====
   * [[http://code.activestate.com/recipes/577267-xml-to-python-data-structure-de-serialization/?in=lang-python|XML to Python data de-serialization]]   * [[http://code.activestate.com/recipes/577267-xml-to-python-data-structure-de-serialization/?in=lang-python|XML to Python data de-serialization]]
   * [[http://code.activestate.com/recipes/498181-add-thousands-separator-commas-to-formatted-number/|Ajouter des séparateurs de milliers à des nombres formattés]]   * [[http://code.activestate.com/recipes/498181-add-thousands-separator-commas-to-formatted-number/|Ajouter des séparateurs de milliers à des nombres formattés]]
 +  * [[http://code.activestate.com/recipes/577459-convert-a-youtube-transcript-in-srt-subtitle/?c=15695| Convert a youtube transcript in srt subtitle]] <code python>#!/usr/bin/python
 +# -*- encoding:utf-8 -*-
 +
 +"""Translate Google's Transcript into srt file.
 +
 +Takes google's transcript filename as argument (xml extension required).
 +
 +NB: to get google's transcript, use tihs URL:
 +http://video.google.com/timedtext?lang=en&v=VIDEO_ID
 +"""
 +
 +# srt example
 +"""1
 +00:00:20,672 --> 00:00:24,972
 +Entre l’Australia et la South America,
 +dans l’Océan South Pacific…"""
 +
 +# Google's transcript example (first tags)
 +"""<?xml version="1.0" encoding="utf-8" ?>
 +<transcript>
 +<text start="11.927" dur="2.483">
 +This is a matter of National Security.</text>"""
 +
 +import re, sys
 +
 +# Pattern to identify a subtitle and grab start, duration and text.
 +pat = re.compile(r'<?text start="(\d+\.\d+)" dur="(\d+\.\d+)">(.*)</text>?')
 +
 +def parseLine(text):
 + """Parse a subtitle."""
 + m = re.match(pat, text)
 + if m:
 + return (m.group(1), m.group(2), m.group(3))
 + else:
 + return None
 +
 +def formatSrtTime(secTime):
 + """Convert a time in seconds (google's transcript) to srt time format."""
 + sec, micro = str(secTime).split('.')
 + m, s = divmod(int(sec), 60)
 + h, m = divmod(m, 60)
 + return "{:02}:{:02}:{:02},{}".format(h,m,s,micro)
 +
 +def convertHtml(text):
 + """A few HTML encodings replacements.
 + &amp;#39; to '
 + &amp;quot; to "
 + """
 + return text.replace('&amp;#39;', "'").replace('&amp;quot;', '"')
 +
 +def printSrtLine(i, elms):
 + """Print a subtitle in srt format."""
 + return "{}\n{} --> {}\n{}\n\n".format(i, formatSrtTime(elms[0]), formatSrtTime(float(elms[0])+float(elms[1])), convertHtml(elms[2]))
 +
 +fileName = sys.argv[1]
 +
 +def main(fileName):
 + """Parse google's transcript and write the converted data in srt format."""
 + with open(sys.argv[1], 'r') as infile:
 + buf = []
 + for line in infile:
 + buf.append(line.rstrip('\n'))
 + # Split the buffer to get one string per tag.
 + buf = "".join(buf).split('><')
 + i = 0
 + srtfileName = fileName.replace('.xml', '.srt')
 + with open(srtfileName, 'w') as outfile:
 + for text in buf:
 + parsed = parseLine(text)
 + if parsed:
 + i += 1
 + outfile.write(printSrtLine(i, parsed))
 + print('DONE ({})'.format(srtfileName))
 +
 +if __name__ == "__main__":
 + main(fileName)</code>
 ===== Advocacy ===== ===== Advocacy =====
   * [[http://luxor-xul.sourceforge.net/talk/jug-feb-2003/slides.html|Présentation de Luxor-XUL]], qui comprends un plaidoyer pour Python assez synthetic   * [[http://luxor-xul.sourceforge.net/talk/jug-feb-2003/slides.html|Présentation de Luxor-XUL]], qui comprends un plaidoyer pour Python assez synthetic
python.1280249286.txt.gz · Last modified: 2010/07/27 18:48 by ginko