| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| python [2010/10/08 17:25] – ginko | python [2014/09/13 14:03] (current) – [Recipes] ginko |
|---|
| * [[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]] |
| * [[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 ===== | ===== Profilage, optimisation et performances ===== |
| * [[python_tuning|Tuning python]] | * [[python_tuning|Tuning python]] |
| * [[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. |
| | &#39; to ' |
| | &quot; to " |
| | """ |
| | return text.replace('&#39;', "'").replace('&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 |