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/09/27 17:28] – 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 24: | Line 31: | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | |||
| ===== Template Files to Start With ===== | ===== Template Files to Start With ===== | ||
| Line 36: | 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++='/ | ||
| - | </ | ||
| - | |||
| - | When it's desirable to clip output to exactly the width of the window: | ||
| - | |||
| - | <code bash> | ||
| - | alias clip=" | ||
| - | </ | ||
| - | |||
| - | When you want to repeat a command a few times... | ||
| - | <code bash> | ||
| - | seq 1 50 | xargs -I{} -n1 echo '{} Hello World!' | ||
| - | </ | ||
| ===== For / Else (Nobreak) ===== | ===== For / Else (Nobreak) ===== | ||
| Line 166: | 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 174: | 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 235: | Line 150: | ||
| | | ||
| if __name__ == ' | if __name__ == ' | ||
| - | cProfile.run( " | + | cProfile.run(" |
| </ | </ | ||
| Line 249: | 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 255: | 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 289: | 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 304: | 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 318: | 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.1380328097.txt.gz · Last modified: 2023/04/12 20:44 (external edit)