python:python
                Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| python:python [2013/03/13 21:51] – created dblume | python:python [2024/02/27 15:43] (current) – [Linux script that takes either stdin or files] dblume | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Python ====== | + | ======  | 
| Man, there' | Man, there' | ||
| Line 7: | Line 7: | ||
|   * [[http:// |   * [[http:// | ||
|   * [[http:// |   * [[http:// | ||
| - |   * Of course, there' | + |   * Of course, there' | 
|   * There' |   * There' | ||
| - |   * Look into the microframework [[http:// | + |   * Look into the microframework [[http:// | 
| + |   * [[https:// | ||
| + |   * [[http:// | ||
| + |   * [[http:// | ||
| + |   * [[https:// | ||
| + |   * A Power Point deck by Alex Martelli describing [[http:// | ||
| + |   * [[http:// | ||
| + |   * [[http:// | ||
| Would be nice to create a binary search in text files in Python.  | Would be nice to create a binary search in text files in Python.  | ||
| Line 16: | Line 23: | ||
| Would be good to experiment with [[http:// | Would be good to experiment with [[http:// | ||
| + | |||
| ===== Data Analysis ===== | ===== Data Analysis ===== | ||
| Line 23: | Line 31: | ||
|   * [[http:// |   * [[http:// | ||
|   * [[http:// |   * [[http:// | ||
| + | |||
| ===== Template Files to Start With ===== | ===== Template Files to Start With ===== | ||
| Line 35: | Line 44: | ||
| </ | </ | ||
| - | ===== Linux or Bash Tips ===== | ||
| - | |||
| - | Useful bash command for finding strings within python files... | ||
| - | |||
| - | <code bash> | ||
| - | find . -name \*.py -type f -print0 | xargs -0 grep -nI " | ||
| - | </ | ||
| - | |||
| - | Interesting way to use '' | ||
| - | |||
| - | <code bash> | ||
| - | #!/bin/bash | ||
| - | find $PWD -regex " | ||
| - |     grep -v " \|unwantedpath/ | ||
| - | cscope -q -b | ||
| - | </ | ||
| - | |||
| - | And these two have nothing to do with Python.  | ||
| - | |||
| - | <code bash> | ||
| - | nm obj-directory/ | ||
| - | find bindirectory/ | ||
| - |     c++filt | grep -P " | ||
| - | </ | ||
| - | |||
| - | Also handy to merge two streams together... | ||
| - | |||
| - | <code bash> | ||
| - | ( cat file1 && cat file2 ) | sort | ||
| - | </ | ||
| - | |||
| - | When a little quick math is needed, use '' | ||
| - | <code bash> | ||
| - | $ bc <<< | ||
| - | F | ||
| - | $ bc -l <<< | ||
| - | .33333333333333333333 | ||
| - | $ bc <<< | ||
| - | .33 | ||
| - | $ bc <<< | ||
| - | 11 | ||
| - | </ | ||
| - | |||
| - | and, when coverting from hex to dec... | ||
| - | |||
| - | <code bash> | ||
| - | echo $((0x2dec)) | ||
| - | </ | ||
| - | |||
| - | But, then again, does that really seem easier than, | ||
| - | |||
| - | < | ||
| - | python -c "print int(' | ||
| - | </ | ||
| - | |||
| - | There' | ||
| - | |||
| - | <code bash> | ||
| - | $ echo $(( ($(date +%s) - $(date -d " | ||
| - | </ | ||
| - | |||
| - | And a Python way... | ||
| - | |||
| - | <code python> | ||
| - | python -c " | ||
| - | </ | ||
| - | |||
| - | And for displaying lines to get cut instead of wrapped: | ||
| - | |||
| - | <code bash> | ||
| - | cat_one_line_per_row() { | ||
| - |   cat " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ctags' | ||
| - | |||
| - | <code bash> | ||
| - | ctags -n --if0=yes --c++-kinds=+p --langmap=c++: | ||
| - |     --langmap=asm: | ||
| - | --exclude=unwanted_file.lst \ | ||
| - |     --exclude=' | ||
| - |     --regex-C++='/ | ||
| - | </ | ||
| ===== For / Else (Nobreak) ===== | ===== For / Else (Nobreak) ===== | ||
| Line 155: | Line 80: | ||
| ===== Linux script that takes either stdin or files ===== | ===== Linux script that takes either stdin or files ===== | ||
| + | Newer way, **use [[https:// | ||
| <code python> | <code python> | ||
| if __name__==' | if __name__==' | ||
| Line 163: | Line 89: | ||
| if not line: | if not line: | ||
| break | break | ||
| - | my_process_line( line.rstrip() ) | + | my_process_line(line.rstrip()) | 
| else: | else: | ||
| # Process lines of the files specified. | # Process lines of the files specified. | ||
|         for fname in sys.argv[1: |         for fname in sys.argv[1: | ||
| - | if not os.path.exists( fname ): | + |             if not os.path.exists(fname): | 
| - | treat_argument_as_literal( fname ) | + | treat_argument_as_literal(fname) | 
| continue | continue | ||
| - |             with open( fname, ' | + |             with open(fname, ' | 
| while 1: | while 1: | ||
| line = f.readline() | line = f.readline() | ||
| if not line: | if not line: | ||
| break | break | ||
| - | my_process_line( line.rstrip() ) | + | my_process_line(line.rstrip()) | 
| </ | </ | ||
| Line 181: | Line 107: | ||
| [[http:// | [[http:// | ||
| + | |||
| + | ===== cProfile vs. line_profiler and kernprof ===== | ||
| + | |||
| + | Raymond Hettinger [[https:// | ||
| + | |||
| + | Here it is: [[http:// | ||
| ===== timeit ===== | ===== timeit ===== | ||
| Line 218: | Line 150: | ||
|      |      | ||
| if __name__ == ' | if __name__ == ' | ||
| - |     cProfile.run( " | + |     cProfile.run(" | 
| </ | </ | ||
| Line 232: | Line 164: | ||
| # Split input data by row and then on spaces | # Split input data by row and then on spaces | ||
| - | rows = [ line.strip().split(' | + | rows = [line.strip().split(' | 
| # Reorganize data by columns | # Reorganize data by columns | ||
| Line 238: | Line 170: | ||
| # Compute column widths by taking maximum length of values per column | # Compute column widths by taking maximum length of values per column | ||
| - | col_widths = [ max(len(value) for value in col) for col in cols ] | + | col_widths = [max(len(value) for value in col) for col in cols] | 
| # Create a suitable format string | # Create a suitable format string | ||
| - | format = ' ' | + | format = ' ' | 
| # Print each row using the computed format | # Print each row using the computed format | ||
| Line 272: | Line 204: | ||
| self.__m_x = x | self.__m_x = x | ||
| - | x = property( getx, setx ) | + |     x = property(getx, | 
| class B: | class B: | ||
|     """ |     """ | ||
| - |     __slots__ = [ " | + |     __slots__ = [" | 
|     def __init__(self): |     def __init__(self): | ||
| self.__m_x = 0 | self.__m_x = 0 | ||
| Line 287: | Line 219: | ||
| self.__m_x = x | self.__m_x = x | ||
| - |     x = property( getx, setx )         | + |     x = property(getx, | 
| class C(object): | class C(object): | ||
| - |     """ | + |     """ | 
|     def __init__(self): |     def __init__(self): | ||
| self.__x = 0 | self.__x = 0 | ||
| Line 301: | Line 233: | ||
| self.__x = x | self.__x = x | ||
| - | x = property( getx, setx ) | + |     x = property(getx, | 
| + | </ | ||
| + | |||
| + | ====== filelock ====== | ||
| + | |||
| + | Evan Fosmark has a filelock module.  | ||
| + | |||
| + | <code python> | ||
| + | import os | ||
| + | import fcntl | ||
| + | import inspect | ||
| + | # Maybe use os.path.abspath(__file__) ? | ||
| + | with open(os.path.abspath inspect.getfile(inspect.currentframe())), | ||
| + | try: | ||
| + |         fcntl.flock(f, | ||
| + | call_that_cannot_be_concurrent() | ||
| + | finally: | ||
| + |         fcntl.flock(f, | ||
| + | </ | ||
| + | |||
| + | ====== Various Approaches to threaded URL Requests ====== | ||
| + | |||
| + |   * [[https:// | ||
| + |   * [[https:// | ||
| + |   * [[https:// | ||
| + |   * Or, use the doc's [[https:// | ||
| + |   * And, as mentioned in Parallelism in One Line, [[https:// | ||
| + | |||
| + | ====== Fibonacci Generator with Itertools ====== | ||
| + | |||
| + | <code python> | ||
| + | import itertools | ||
| + | |||
| + | def fib(n): | ||
| + |     """ | ||
| + | a, b = 0, 1 | ||
| + | while True: | ||
| + | yield a | ||
| + | b = a + b | ||
| + | yield b | ||
| + | a = a + b | ||
| + | |||
| + | if __name__ == ' | ||
| + |     for x in itertools.islice(fib(), | ||
| + | print x | ||
| + | |||
| + | # for i in range( 5 ): | ||
| + | # print i, fib( i ) | ||
| + | </ | ||
| + | |||
| + | ====== Parse C++ Code with nm and graphviz' | ||
| + | |||
| + | <code bash> | ||
| + | sudo apt-get install graphviz | ||
| + | </ | ||
| + | |||
| + | <code python> | ||
| + | # Read `nm` output | ||
| + |     output = subprocess.check_output([' | ||
| + |     for line in output.split(' | ||
| + |         if ' | ||
| + | |||
| + | # Make a .dot file | ||
| + |     with open(filename + ' | ||
| + |         file.write(' | ||
| + |         for f, destinations in self.graph.items(): | ||
| + |             for d in destinations: | ||
| + |                 file.write(f'  | ||
| + | |||
| + | |||
| + | def create_png_image(filename): | ||
| + |     with open(filename + ' | ||
| + |         p1 = subprocess.run([' | ||
| </ | </ | ||
python/python.1363236705.txt.gz · Last modified: 2023/04/12 20:44 (external edit)