"Python"의 두 판 사이의 차이
ph
								
												
				| 4번째 줄: | 4번째 줄: | ||
      process(line)  |       process(line)  | ||
https://docs.python.org/2/library/fileinput.html#module-fileinput  | https://docs.python.org/2/library/fileinput.html#module-fileinput  | ||
| + | {{break}}  | ||
| + | |||
| + | ==file position==  | ||
| + |  def skip_comments(f):  | ||
| + |      while True:  | ||
| + |          pos = f.tell()  | ||
| + |          line = f.readline().strip()  | ||
| + |          if not line.startswith('#'):  | ||
| + |              f.seek(pos) #rewind  | ||
| + |              break  | ||
| + | {{c|tell}}[https://www.tutorialspoint.com/python/file_tell.htm]로 현재 위치를 얻고, [https://www.tutorialspoint.com/python/file_seek.htm {{c|seek}}]로 set.  | ||
{{break}}  | {{break}}  | ||
2017년 4월 10일 (월) 15:35 판
목차
Multiple input stream
import fileinput
for line in fileinput.input():
    process(line)
https://docs.python.org/2/library/fileinput.html#module-fileinput
file position
def skip_comments(f):
    while True:
        pos = f.tell()
        line = f.readline().strip()
        if not line.startswith('#'):
            f.seek(pos) #rewind
            break
tell[1]로 현재 위치를 얻고, seek로 set.
Interactive session detection
sys.stdin.isatty()
http://stackoverflow.com/a/7576567/766330
Temporary file or directory
tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=[, prefix='tmp'[, dir=None]]]]]) [2]
임시파일을 만든다. 아래를 쓸것.
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=[, prefix='tmp'[, dir=None[, delete=True]]]]]]) [3]
위와 동일하나 visible name의 파일을 만든다. 이름은 반환값의 name속성으로 받을 수 있다.
주의할점은, delete속성의 기본값이 True여서 쓰여진 후 곧바로 지워진다. 계속 쓰려면 해당속성을 False로 해야 한다.
tempfile.mkdtemp([suffix=[, prefix='tmp'[, dir=None]]]) [4]
임시디렉토리를 만들고, 자동으로 지우지 않는다.
Check syntax without running
python -m py_compile script.py
http://stackoverflow.com/a/8437597/766330
Time
current time
>>> import time >>> time.time() 1491792653.410371
>>> import datetime
>>> datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
'2017-04-10 11:51:17'  
>>> datetime.datetime.utcnow()
datetime.datetime(2017, 4, 10, 2, 51, 34, 356682)
>>> datetime.datetime.now()
datetime.datetime(2017, 4, 10, 11, 51, 36, 572681)
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Monday, 10. April 2017 11:51AM'
yesterday
>>> from datetime import date, timedelta
>>> yesterday = date.today() - timedelta(1)
>>> print yesterday.strftime('%m%d%y')
'110909'
String replace
str.replace
str.replace(old, new[, max]) [7]
re.sub
>>> re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
 ...        r'static PyObject*\npy_\1(void)\n{',
 ...        'def myfunc():')
 'static PyObject*\npy_myfunc(void)\n{' [8]
commented version example
line = re.sub(r""" (?x) # Use free-spacing mode. < # Match a literal '<' /? # Optionally match a '/' \[ # Match a literal '[' \d+ # Match one or more digits > # Match a literal '>' """, "", line) [9]
is and ==
is is identity testing, == is equality testing. what happens in your code would be emulated in the interpreter like this:
>>> a = 'pub' >>> b = ''.join(['p', 'u', 'b']) >>> a == b True >>> a is b False
Access index in for loop
enumerate
for idx, val in enumerate(ints): print(idx, val)
Max integer
sys.maxint
Argument parsing
use argparse
range by step
>>> step = .1 >>> N = 10 # number of data points >>> [ x / pow(step, -1) for x in range(0, N + 1) ] [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
File existence
os.path.exists(file_path)
Define source code encoding
첫째나 둘째줄에,
# coding=<encoding name>
보통 에디터들은 다음 형식을 이해함.
#!/usr/bin/python # -*- coding: <encoding name> -*-
혹은
#!/usr/bin/python # vim: set fileencoding=<encoding name> :
정확히는, 첫째나 둘째줄이 아래 정규식에 맞아야 함.
^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)