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 17:16] – 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([' | ||
</ | </ | ||
Line 307: | Line 312: | ||
TODO Link to my tips from LiveJournal and GMail, and why I chose which timing modules. | TODO Link to my tips from LiveJournal and GMail, and why I chose which timing modules. | ||
- | Touching this page to see if the indexmenu will update its data. |
python/python.1363220210.txt.gz · Last modified: 2023/04/12 20:44 (external edit)