Разни библиотечки...

„ Програмиране с Python“, ФМИ

import "Стефан Кънев"
import "Николай Бачийски"
import "Точо Точев"
import "Димитър Димитров"

11.05.2009

math

No comment




import math

math
.sin(1)

datetime

datetime е модул, който ви дава основна функционалност за дати

Пример с datetime

now     = datetime.datetime.now()
future  
= now + datetime.timedelta(minutes=45)
past    
= now - datetime.timedelta(minutes=45)
special
= datetime.datetime(2009, 5, 11, 19, 0)

some_date
= datetime.datetime.strptime(
               
'11.05.2009 17:00', '%d.%m.%Y %H:%M')

hour
= datetime.timedelta(minutes=30) * 2

print(now, future, past, special, some_date, sep='\n')
print(hour)
print(now.strftime('%d.%m.%Y %H:%M'))

os

os - функционалност от операционната система os.path - функционалност за работа с пътища във файловата система

pickle

pickle е модул, който може да сериализира прости Python обекти. Приема binary отворен за писане файл file и Python обект object. Записва обекта в файла. Приема binary отворен за четене файл и прочита един обект, който е и резултат от функцията

Пример с pickle

import pickle

with open('/tmp/foo.txt', 'wb') as file:
    pickle
.dump("The answer", file)
    pickle
.dump(["spam", "eggs", "ham"], file)

with open('/tmp/foo.txt', 'rb') as file:
   
print(pickle.load(file))
   
print(pickle.load(file))

shelve

Пример с shelve

import shelve

db
= shelve.open('/tmp/foo.db')
db
['name'] = 'Mityo the Python'
db
['age'] = 33
db
['favouriteBands'] = ["Blackmore's Night", "Deep Purple", "Rainbow"]
db
['favouriteSong'] = "Colubrid on the Tree"
db
.close()

db
= shelve.open('/tmp/foo.db')
print(db.keys())
print(db['name'])
print(db['favouriteBands'])
print(db['favouriteSong'])
db
.close()

json

json е модул, който може да сериализира прости Python обекти. Приема binary отворен за писане файл file и Python обект object. Записва обекта в файла. Приема binary отворен за четене файл и прочита един обект, който е и резултат от функцията

Пример с json

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> print(json.dumps("\"foo\bar"))
"\"foo\bar"
>>> print(json.dumps('\u1234'))
"\u1234"
>>> print(json.dumps('\\'))
"\\"
>>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
{"a": 0, "b": 0, "c": 0}

>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
['foo', {'bar': ['baz', None, 1.0, 2]}]

bytes

struct

Понякога ни трябва нещо да сериализираме в нещо „low level“ - нещо като за C


>>> struct.pack('bbH', 4,0,3)
b
'\x04\x00\x03\x00'
>>> struct.unpack('bbH', b'\x04\x00\x03\x00')
(4, 0, 3)

csv

import csv

with open('/tmp/eggs.csv', 'w') as file:
    spam_writer
= csv.writer(file, delimiter=',', quotechar='"')
    spam_writer
.writerow(['Spam'] * 2 + ['Baked Beans'])
    spam_writer
.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

with open('/tmp/eggs.csv', 'r') as file:
    spam_reader
= csv.reader(file, delimiter=',', quotechar='"')
   
for row in spam_reader:
       
print(' & '.join(row))
# Spam & Spam & Baked Beans
# Spam & Lovely Spam & Wonderful Spam

configparser

configparser - модул за обработка на .conf файлове:

[auth]
username = someone
password = somepass

[report]
url = http://docs.python.org

Пример с configparser

import configparser

config
= configparser.ConfigParser()
config
.add_section('auth')
config
.set('auth', 'password', 'm@st@')

with open('/tmp/test.cfg', 'w') as file:
    config
.write(file)

config
= configparser.ConfigParser()
config
.read('/tmp/test.cfg')

print(config.get('auth', 'password')) # -> "m@st@"

getopt

getopt - parser за опции от командния ред
import getopt, sys

def main():
   
try:
        opts
, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
   
except getopt.GetoptError as err:
       
print(err) # will print something like "option -a not recognized"
       
print(usage())
        sys
.exit(1)
    output
, verbose = None, False
   
for o, a in opts:
       
if o == "-v": verbose = True
       
elif o in ("-h", "--help"):
            usage
()
            sys
.exit()
       
elif o in ("-o", "--output"): output = a
       
else: assert False, "unhandled option"
   
pass # TODO

if __name__ == "__main__":
    main
()

StringIO

Ами ако не искаме нещата да отиват във файл ами в низ.


from io import StringIO

data
= StringIO()

config
= configparser.ConfigParser()
config
.add_section('auth')
config
.set('auth', 'password', 'm@st@')
config
.write(data)

print(data.getvalue())

xml.dom.minidom

xml.dom.minidom — Lightweight DOM implementation
import xml.dom.minidom

document = """\
<slideshow>
<title>Demo slideshow</title>
<slide>slide1</slide>
<slide>slide2</slide>
</slideshow>
"""

dom = xml.dom.minidom.parseString(document)

xml.dom.minidom(2)

def getText(nodelist):
    rc
= ""
   
for node in nodelist:
       
if node.nodeType == node.TEXT_NODE:
            rc
= rc + node.data
   
return rc

def handleSlideshow(slideshow):
   
print("<html><title>",
          getText
(slideshow.getElementsByTagName("title")[0].childNodes),
         
"</title><body>")
    handleSlides
(slideshow.getElementsByTagName("slide"))
   
print("</body></html>")

def handleSlides(slides):
   
for slide in slides:
       
print('<div id="slide">',
              getText
(slide.childNodes),
             
'</div>')

handleSlideshow
(dom)

html parsing

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):

   
def handle_starttag(self, tag, attrs):
       
print("Encountered the beginning of a {0} tag".format(tag))

   
def handle_endtag(self, tag):
       
print("Encountered the end of a {0} tag".format(tag))

urllib.request

urllib.request - за работа с http

Примери с urllib.request

import urllib.request
import urllib.parse

params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})

#GET
f
= urllib.request.urlopen("http://www.python.org/cgi-bin/query?{0}".format(params))
print(f.read())

# Същото с POST
f
= urllib.request.urlopen("http://www.python.org/cgi-bin/post",
                           data
=params)
print(f.read())

Други

Архивиране/компресия

Анотации(1)

Анотации(2)

Syntax

def func(v1: expression, 
         v1
: expression = 3,
         
*args: expression,
         
**kwargs: expression) -> expression:
     
...(body)

Достъпват се с f.__annotations__

Анотации(3)

def add(a:int, b: float=1) -> float:
   
return a + b

print(add(3, 3.6))
print(add.__annotations__)

inspect

import inspect

def add(a:int, b: float=1) -> float:
   
return a + b

specs
= inspect.getfullargspec(add)
>>> specs.defaults
(1,)
>>> specs.args
['a', 'b']
>>> specs.annotations
{'a': <class 'int'>, 'b': <class 'float'>, 'return': <class 'float'>}

# inspect.ismethod
# inspect.isgenerator
# ...

Още въпроси?