Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PythonΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ·ΠΈ

import os

PATH = os.environ['PATH']

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Π³Ρ€ΡƒΠΏΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ посвящСна Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ. НиТС приводятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны ΠΊΠ°ΠΊ Π² Unix, Ρ‚Π°ΠΊ ΠΈ Π² Windows.

access(path, flags) ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° доступности Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ path. Π Π΅ΠΆΠΈΠΌ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ доступа указываСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ flags, составлСнных ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ (ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ Π˜Π›Π˜) Ρ„Π»Π°Π³ΠΎΠ² os.F_OK (Ρ„Π°ΠΉΠ» сущСствуСт), os.R_OK (ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ), os.W_OK (Π² Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ) ΠΈ os.X_OK (Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ). chdir(path) Π”Π΅Π»Π°Π΅Ρ‚ path Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ. getcwd() Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. chmod(path, mode) УстанавливаСт Ρ€Π΅ΠΆΠΈΠΌ доступа ΠΊ path Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ mode. Π Π΅ΠΆΠΈΠΌ доступа ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, скомбинировав Ρ„Π»Π°Π³ΠΈ (см. Π½ΠΈΠΆΠ΅). Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ chmod() Π½Π΅ дополняСт Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Π° устанавливаСт Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ. listdir(dir) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ dir. Π’ список Π½Π΅ входят ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния "." ΠΈ "..". mkdir(path[, mode]) Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ path. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π΅ΠΆΠΈΠΌ mode Ρ€Π°Π²Π΅Π½ 0777, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ: S_IRWXU|S_IRWXG|S_IRWXO, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ константами модуля stat. makedirs(path[, mode]) Аналог mkdir(), ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚. Π’ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° послСдний ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΡƒΠΆΠ΅ сущСствуСт. remove(path), unlink(path) УдаляСт Ρ„Π°ΠΉΠ» path. Для удалСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ rmdir() ΠΈ removedirs(). rmdir(path) УдаляСт пустой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ path. removedirs(path) УдаляСт path Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ нСпустого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ случаС Ссли самый послСдний Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ β€” Π½Π΅ пустой, возбуТдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OSError. rename(src, dst) ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ src Π² dst. renames(src, dst) Аналог rename(), ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ для ΠΏΡƒΡ‚ΠΈ dst ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‰ΠΈΠΉ пустыС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΏΡƒΡ‚ΠΈ src. stat(path) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ path Π² Π²ΠΈΠ΄Π΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ дСсятиэлСмСнтного ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Для доступа ΠΊ элСмСнтам ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ константы ΠΈΠ· модуля stat, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ stat.ST_MTIME (врСмя послСднСй ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°). utime(path, times) УстанавливаСт значСния Π²Ρ€Π΅ΠΌΠ΅Π½ послСднСй ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ (mtime) ΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ (atime). Если times Ρ€Π°Π²Π΅Π½ None, Π² качСствС Π²Ρ€Π΅ΠΌΠ΅Π½ бСрСтся Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях times рассматриваСтся ΠΊΠ°ΠΊ двухэлСмСнтный ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (atime, mtime). Для получСния atime ΠΈ mtime Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ stat() совмСстно с константами модуля stat.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с процСссами ΠΌΠΎΠ΄ΡƒΠ»ΡŒ os ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (здСсь упомянуты Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, доступныС ΠΊΠ°ΠΊ Π² Unix, Ρ‚Π°ΠΊ ΠΈ Π² Windows):

abort() Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса сигнал SIGABRT. system(cmd) ВыполняСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку cmd Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ system Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ языка C. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. times() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· пяти элСмСнтов, содСрТащий врСмя Π² сСкундах Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСсса, ОБ (ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ процСсса), Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов, ОБ для Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов, Π° Ρ‚Π°ΠΊΠΆΠ΅ врСмя ΠΎΡ‚ фиксированного ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° запуска систСмы). getloadavg() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… занятости процСссора Π·Π° послСдниС 1, 5 ΠΈ 15 ΠΌΠΈΠ½ΡƒΡ‚. ΠœΠΎΠ΄ΡƒΠ»ΡŒ stat

Π’ этом ΠΌΠΎΠ΄ΡƒΠ»Π΅ описаны константы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ индСксы ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌ, примСняСмым функциями os.stat() ΠΈ os.chmod() (Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ). Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Python.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ tempfile

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послС выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСйствий большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½. Для этих Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ TemporaryFile, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ записи ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΡƒΠ΄Π° Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ:

import tempfile

f = tempfile.TemporaryFile()

f.write("0"*100)    # записываСтся сто символов 0

f.seek(0)           # уст. ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π°

print len(f.read()) # читаСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° ΠΈ вычисляСтся Π΄Π»ΠΈΠ½Π°

Как ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ 100. Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ всС ссылки Π½Π° Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСкстов

ΠœΠΎΠ΄ΡƒΠ»ΠΈ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСны Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ вычислСния

ΠœΠΎΠ΄ΡƒΠ»ΠΈ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ станут ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ рассмотрСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Архивация

К этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ отнСсСны ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с внСшними Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠœΠΎΠ΄ΡƒΠ»ΡŒ pickle

ΠŸΡ€ΠΎΡ†Π΅ΡΡ записи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ² называСтся сСриализациСй. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²ΠΎ внСшнСй памяти ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ связи, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Π½Π°Ρ‡Π°Π»Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ pickle позволяСт ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΡ… Π² строкС ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сСриализованы:

β€’ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹: None, числа, строки (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈ Unicode).

β€’ ΡΠΏΠΈΡΠΊΠΈ, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΈ словари, содСрТащиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСриализуСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

β€’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ модуля (сохраняСтся имя, Π½ΠΎ Π½Π΅ рСализация!).

β€’ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

β€’ ΠΊΠ»Π°ΡΡΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ модуля.

β€’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов, __dict__ ΠΈΠ»ΠΈ __setstate__() ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ сСриализуСмыми.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования модуля ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅:

import pickle, time

mydata = ("abc", 12, [1, 2, 3])

output_file = open("mydata.dat", "w")

p = pickle.Pickler(output_file)

p.dump(mydata)

output_file.close()

ВосстановлСниС:

import pickle

input_file = open("mydata.dat", "r")

mydata = pickle.load(input_file)

print mydata

input_file.close()

ΠœΠΎΠ΄ΡƒΠ»ΡŒ shelve

Для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€ΠΎΠ΄Π½ΠΎΠΌ для Python Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΊΡƒ (shelve). По своСму интСрфСйсу ΠΏΠΎΠ»ΠΊΠ° Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ словаря. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΊΡƒ:

import shelve

data = ("abc", 12)     # - Π΄Π°Π½Π½Ρ‹Π΅ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)

key = "key"            # - ΠΊΠ»ΡŽΡ‡ (строка)

filename = "polka.dat" # - имя Ρ„Π°ΠΉΠ»Π° для хранСния ΠΏΠΎΠ»ΠΊΠΈ

d = shelve.open(filename) # ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΠ»ΠΊΠΈ

d[key] = data          # ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ key

                       # (удаляСт староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ)

data = d[key]          # Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ

len(d)                 # ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° ΠΏΠΎΠ»ΠΊΠ΅

d.sync()               # запись ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π‘Π” Π½Π° дискС

del d[key]             # ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

flag = d.has_key(key)  # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия ΠΊΠ»ΡŽΡ‡Π°

lst = d.keys()         # список ΠΊΠ»ΡŽΡ‡Π΅ΠΉ

d.close()              # Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΠ»ΠΊΠΈ

ΠœΠΎΠ΄ΡƒΠ»ΠΈ anydbm ΠΈ gdbm

Для внСшнСго хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащиС ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡β€“Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Python имССтся нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ: bsddb, gdbm, dbhash ΠΈ Ρ‚.ΠΏ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ anydbm Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρ…ΡΡˆΠ΅ΠΉ, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для чтСния ряда Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² (any β€” любой).

Доступ ΠΊ Ρ…ΡΡˆΡƒ ΠΈΠ· Python ΠΌΠ°Π»ΠΎ отличаСтся ΠΎΡ‚ доступа ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ. Π Π°Π·Π½ΠΈΡ†Π° лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ…ΡΡˆ Π΅Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для создания, чтСния ΠΈΠ»ΠΈ записи, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ записи Ρ…ΡΡˆ блокируСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ csv

Π€ΠΎΡ€ΠΌΠ°Ρ‚ CSV (comma separated values β€” значСния, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми) достаточно популярСн для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ элСктронными Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ посвящСн записи Π² CSV–файл ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈΠ· Π½Π΅Π³ΠΎ: