"Python"의 두 판 사이의 차이

ph
이동: 둘러보기, 검색
60번째 줄: 60번째 줄:
 
  >>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
 
  >>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
 
  'Monday, 10. April 2017 11:51AM'
 
  'Monday, 10. April 2017 11:51AM'
[http://stackoverflow.com/questions/13890935/does-pythons-time-time-return-the-local-or-utc-timestamp]
+
[http://stackoverflow.com/questions/13890935/does-pythons-time-time-return-the-local-or-utc-timestamp]<br>
 +
if you want UTC, use <c>utcfromtimestamp</c> instead of <c>fromtimestamp</c> [https://stackoverflow.com/a/37188257/766330]
  
 
===yesterday===
 
===yesterday===

2017년 9월 29일 (금) 11:37 판

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로 현재 위치를 얻고, seek로 set.

>>> f = open('workfile', 'r+')
>>> f.write('0123456789abcdef')
>>> f.seek(5)      # Go to the 6th byte in the file
>>> f.read(1)
'5'
>>> f.seek(-3, 2)  # Go to the 3rd byte before the end
>>> f.read(1)
'd'

https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects


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]]]]]) [1]

임시파일을 만든다. 아래를 쓸것.

tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]]) [2]

위와 동일하나 visible name의 파일을 만든다. 이름은 반환값의 name속성으로 받을 수 있다.
주의할점은, delete속성의 기본값이 True여서 쓰여진 후 곧바로 지워진다. 계속 쓰려면 해당속성을 False로 해야 한다.

tempfile.mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]]) [3]

임시디렉토리를 만들고, 자동으로 지우지 않는다.

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'

[4]
if you want UTC, use utcfromtimestamp instead of fromtimestamp [5]

yesterday

>>> from datetime import date, timedelta
>>> yesterday = date.today() - timedelta(1)
>>> print yesterday.strftime('%m%d%y')
'110909'

[6]

strftime format manual


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

[10]


Access index in for loop

enumerate

for idx, val in enumerate(ints):
   print(idx, val)

[11]

Max integer

sys.maxint

[12]


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]

[13]


File existence

os.path.exists(file_path)

[14] [15]


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]+)

https://www.python.org/dev/peps/pep-0263/


randint

from random import randint
print(randint(0,9))

0~9 inclusive
https://docs.python.org/2/library/random.html#random.randint


groupby example

from itertools import groupby

things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]

for key, group in groupby(things, lambda x: x[0]):
    for thing in group:
        print "A %s is a %s." % (thing[1], key)
    print " "

output

A bear is a animal.
A duck is a animal.

A cactus is a plant.

A speed boat is a vehicle.
A school bus is a vehicle.

http://stackoverflow.com/a/7286/766330


Suppress scientific notation

use %f

'%f' % (x/y)

http://stackoverflow.com/a/658777/766330


To ignore exception

except:
    pass

http://stackoverflow.com/a/574734/766330


Delete items from a dictionary while iterating over it

iteration중에는 지울 수 없다. 두번 돌아야 함.

remove = [k for k in mydict if k == val]
for k in remove: del mydict[k]

http://stackoverflow.com/a/5385196/766330

Print without newline

import sys
sys.stdout.write('.')

http://stackoverflow.com/a/493399/766330

if else in list comprehension

[ unicode(x.strip()) if x is not None else '' for x in row ]

http://stackoverflow.com/a/4260304/766330

filtering a dictionary according to an arbitrary condition

use dict comprehension

{k: v for k, v in points.iteritems() if v[0] < 5 and v[1] < 5}

https://stackoverflow.com/a/16589453/766330

Executing multi-line statements within PDB

(pdb) !import code; code.interact(local=vars()) 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

https://stackoverflow.com/a/8387484/766330

Converting a IPython Notebook into a Python file via commandline

$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb

or in ipython notebook

!jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb

https://stackoverflow.com/a/19779226/766330

Write float(or int) to a binary file

import struct
s = struct.pack('f'*len(floats), *floats)
f = open('file','wb')
f.write(s)
f.close()

To read this from C, refer here

https://stackoverflow.com/a/807881/766330