19. Някои библиотеки
math
No comment
import math math.sin(1)
datetime
datetime е модул, който ви дава основна функционалност за дати
- datetime.date(year, month, day) - клас за дата
- datetime.time(hour, minute, second, microsecond, tzinfo=None) - клас за време
- datetime.datetime(...) - клас за дата и време
- datetime.timedelta - разлика м/у 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 - функционалност от операционната система
p |os.path - функционалност за работа с пътища във файловата система- os.system(command) - изпълнява командата
- текущата директория - os.chdir(path) - сменя я ; os.getcwd() - дава я
- os.listdir(path) - дава съдържанието на директорията
- os.makedirs(path) - създава директория и родители
- os.remove(path) - трие файл; os.rmdir(path) - трие ***празна*** директория
- os.stat(path) - данни за файла
- os.walk(path) - for root, dirs, files in os.walk('/tmp/'): pass
- os.path.abspath(path) ; os.path.basename(path) ; os.path.dirname(path)
- os.path.exists(path)
- os.path.isdir(path)
pickle
pickle е модул, който може да сериализира прости Python обекти.
- pickle.dump(object, file)
- Приема binary отворен за писане файл file и Python обект object. Записва обекта в файла.
- pickle.load(file)
- Приема binary отворен за четене файл и прочита един обект, който е и резултат от функцията
- pickle.dumps(object) - връща низ
- pickle.loads(str) - връща обект от низ
- може да бъде backward compatible с python 2 и 1
Пример с 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 е сравнително прост модул, който позволява да записвате данни във файл под формата на речник.
- Можете да ги достъпвате в последствие по ключовете, с които сте ги записали.
- Всички обекти се сериализират посредством pickle.
- Организацията им във файла става посредством dbm или gdbm.
- НЕ е thread-safe откъм писане
- трябва да се внимава с mutable обектите
Пример с 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 обекти.
- json.dump(object, file)
- Приема binary отворен за писане файл file и Python обект object. Записва обекта в файла.
- json.load(file)
- Приема binary отворен за четене файл и прочита един обект, който е и резултат от функцията
- json.dumps(object) - връща низ
- json.loads(str) - връща обект от низ
Пример с 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
- Примери b'aa' и b'\x7f\x00'
- Много близки до низ
- Могат да се конвертират до низ с .decode(encoding)
- Низове могат да се конвертират до bytes с .encode(encoding)
struct
Понякога ни трябва нещо да сериализираме в нещо "low level" - нещо като за C
- struct.pack - "опакова" неща в байтове
- struct.unpack - "разопакова" неща в байтове
>>> 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, 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
Ами ако не искаме нещата да отиват във файл ами в низ.
- поддържа .read, .write и подобни
- взимаме стойността му с .getvalue()
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
- Има различни класове за всякакви неща...
- Лесно се използва
- в стария python за това служи urllib2
Примери с 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())
Други
- hashlib
- base64
- mimetypes
- logging
- ...
Архивиране/компресия
- zlib
- gzip
- bz2
- zipfile
- tarfile
Още въпроси?
- Пишете ни на fmi@py-bg.net
- Страница на курса: http://fmi.py-bg.net/
- Форуми на курса: http://fmi.py-bg.net/topics
- Курсът в Twitter: http://twitter.com/pyfmi
- Курсът във Facebook: http://www.facebook.com/group.php?gid=104970619536589