Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Права доступа к файлам и каталогам

Поиск

>>> import os # Подключаем модуль os

>>> os.access(r"file.txt", os.F_OK) # Файл существует

True

>>> os.access(r"C:\book", os.F_OK) # Каталог существует

True

>>> os.access(r"C:\book2", os.F_OK) # Каталог не существует

False

 

 

>>> os.chmod(r"file.txt", 0o777) # Полный доступ к файлу

16.6. Функции
для манипулирования файлами

>>> import shutil # Подключаем модуль

>>> shutil.copyfile(r"file.txt", r"file2.txt")

>>> # Путь не существует:

>>> shutil.copyfile(r"file.txt", r"C:\book2\file2.txt")

... Фрагмент опущен...

FileNotFoundError: [Errno 2] No such file or directory:

'C:\\book2\\file2.txt'

 

 

>>> shutil.copy(r"file.txt", r"file3.txt")

 

 

>>> shutil.copy2(r"file.txt", r"file4.txt")

 

 

>>> shutil.move(r"file4.txt", r"C:\book\test")

 

 

import os # Подключаем модуль

try:

os.rename(r"file3.txt", "file4.txt")

except OSError:

print("Файл не удалось переименовать")

else:

print("Файл успешно переименован")

 

 

>>> os.remove(r"file2.txt")

>>> os.unlink(r"file4.txt")

 

 

>>> import os.path

>>> os.path.exists(r"file.txt"), os.path.exists(r"file2.txt")

(True, False)

>>> os.path.exists(r"C:\book"), os.path.exists(r"C:\book2")

(True, False)

 

 

>>> os.path.getsize(r"file.txt") # Файл существует

>>> os.path.getsize(r"file2.txt") # Файл не существует

... Фрагмент опущен...

OSError: [Error 2] Не удается найти указанный файл: 'file2.txt'

 

 

>>> import time # Подключаем модуль time

>>> t = os.path.getatime(r"file.txt")

>>> t

1304111982.96875

>>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(t))

'30.04.2011 01:19:42'

 

 

>>> t = os.path.getctime(r"file.txt")

>>> t

1304028509.015625

>>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(t))

'29.04.2011 02:08:29'

 

 

>>> t = os.path.getmtime(r"file.txt")

>>> t

1304044731.265625

>>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(t))

'29.04.2011 06:38:51'

 

Листинг 16.4. Пример использования функции stat()

>>> import os, time

>>> s = os.stat(r"file.txt")

>>> s

nt.stat_result(st_mode=33060, st_ino=2251799813878096, st_dev=0,

st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1304111982,

st_mtime=1304044731, st_ctime=1304028509)

>>> s.st_size # Размер файла

>>> t = s.st_atime # Время последнего доступа к файлу

>>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(t))

'30.04.2011 01:19:42'

>>> t = s.st_ctime # Время создания файла

>>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(t))

'29.04.2011 02:08:29'

>>> t = s.st_mtime # Время последнего изменения файла

>>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime(t))

'29.04.2011 06:38:51'

 

Листинг 16.5. Пример использования функции utime()

>>> import os, time

>>> os.stat(r"file.txt") # Первоначальные значения

nt.stat_result(st_mode=33060, st_ino=2251799813878096, st_dev=0,

st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1304111982,

st_mtime=1304044731, st_ctime=1304028509)

>>> t = time.time() — 600

>>> os.utime(r"file.txt", (t, t)) # Текущее время минус 600 сек

>>> os.stat(r"file.txt")

nt.stat_result(st_mode=33060, st_ino=2251799813878096, st_dev=0,

st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1304112906,

st_mtime=1304112906, st_ctime=1304028509)

>>> os.utime(r"file.txt", None) # Текущее время

>>> os.stat(r"file.txt")

nt.stat_result(st_mode=33060, st_ino=2251799813878096, st_dev=0,

st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1304113557,

st_mtime=1304113557, st_ctime=1304028509)

16.7. Преобразование пути к файлу или каталогу

>>> import os.path

>>> os.path.abspath(r"file.txt")

'C:\\book\\file.txt'

>>> os.path.abspath(r"folder1/file.txt")

'C:\\book\\folder1\\file.txt'

>>> os.path.abspath(r"../file.txt")

'C:\\file.txt'

 

 

>>> os.path.sep

'\\'

 

 

>>> "C:\\temp\\new\\file.txt" # Правильно

'C:\\temp\\new\\file.txt'

>>> r"C:\temp\new\file.txt" # Правильно

'C:\\temp\\new\\file.txt'

>>> "C:\temp\new\file.txt" # Неправильно!!!

'C:\temp\new\x0cile.txt'

 

 

>>> r"C:\temp\new\" # Неправильно!!!

SyntaxError: EOL while scanning string literal

>>> r"C:\temp\new\\"

'C:\\temp\\new\\\\'

 

 

>>> "C:\\temp\\new\\" # Правильно

'C:\\temp\\new\\'

>>> r"C:\temp\new\\"[:-1] # Можно и удалить слэш

'C:\\temp\\new\\'

 

 

>>> os.path.isabs(r"C:\book\file.txt")

True

>>> os.path.isabs("file.txt")

False

 

 

>>> os.path.basename(r"C:\book\folder1\file.txt")

'file.txt'

>>> os.path.basename(r"C:\book\folder")

'folder'

>>> os.path.basename("C:\\book\\folder\\")

''

 

 

>>> os.path.dirname(r"C:\book\folder\file.txt")

'C:\\book\\folder'

>>> os.path.dirname(r"C:\book\folder")

'C:\\book'

>>> os.path.dirname("C:\\book\\folder\\")

'C:\\book\\folder'

 

 

>>> os.path.split(r"C:\book\folder\file.txt")

('C:\\book\\folder', 'file.txt')

>>> os.path.split(r"C:\book\folder")

('C:\\book', 'folder')

>>> os.path.split("C:\\book\\folder\\")

('C:\\book\\folder', '')

 

 

>>> os.path.splitdrive(r"C:\book\folder\file.txt")

('C:', '\\book\\folder\\file.txt')

 

 

>>> os.path.splitext(r"C:\book\folder\file.tar.gz")

('C:\\book\\folder\\file.tar', '.gz')

 

 

>>> os.path.join("C:\\", "book\\folder", "file.txt")

'C:\\book\\folder\\file.txt'

>>> os.path.join(r"C:\\", "book/folder/", "file.txt")

'C:\\\\book/folder/file.txt'

 

 

>>> p = os.path.join(r"C:\\", "book/folder/", "file.txt")

>>> os.path.normpath(p)

'C:\\book\\folder\\file.txt'

Перенаправление ввода/вывода

Листинг 16.6. Перенаправление вывода в файл

>>> import sys # Подключаем модуль sys

>>> tmp_out = sys.stdout # Сохраняем ссылку на sys.stdout

>>> f = open(r"file.txt", "a") # Открываем файл на дозапись

>>> sys.stdout = f # Перенаправляем вывод в файл

>>> print("Пишем строку в файл")

>>> sys.stdout = tmp_out # Восстанавливаем стандартный вывод

>>> print("Пишем строку в стандартный вывод")

Пишем строку в стандартный вывод

>>> f.close() # Закрываем файл

>>> f = open(r"file.txt", "a")

 

 

>>> print("Пишем строку в файл", file=f)

>>> f.close()

 

 

>>> f = open(r"file.txt", "a")

>>> print("Пишем строку в файл", file = f, flush = True)

>>> print("Пишем другую строку в файл", file = f, flush = True)

>>> f.close()

 

Листинг 16.7. Перенаправление потока ввода

# -*- coding: utf-8 -*-

import sys

tmp_in = sys.stdin # Сохраняем ссылку на sys.stdin

f = open(r"file.txt", "r") # Открываем файл на чтение

sys.stdin = f # Перенаправляем ввод

while True:

try:

line = input() # Считываем строку из файла

print(line) # Выводим строку

except EOFError: # Если достигнут конец файла,

break # выходим из цикла

sys.stdin = tmp_in # Восстанавливаем стандартный ввод

f.close() # Закрываем файл

input()

 

 

>>> tmp_in = sys.stdin # Сохраняем ссылку на sys.stdin

>>> f = open(r"file.txt", "r")

>>> sys.stdin = f # Перенаправляем ввод

>>> sys.stdin.isatty() # Не ссылается на терминал

False

>>> sys.stdin = tmp_in # Восстанавливаем стандартный ввод

>>> sys.stdin.isatty() # Ссылается на терминал

True

>>> f.close() # Закрываем файл

 

Листинг 16.8. Содержимое файла tests.py

# -*- coding: utf-8 -*-

while True:

try:

line = input()

print(line)

except EOFError:

break

 

 

C:\Python34\python.exe tests.py < file.txt

 

 

# -*- coding: utf-8 -*-

print("String") # Эта строка будет записана в файл

 

 

C:\Python34\python.exe tests.py > file.txt

 

 

C:\Python34\python.exe tests.py >> file.txt

 

Листинг 16.9. Индикатор выполнения процесса

# -*- coding: utf-8 -*-

import sys, time

for i in range(5, 101, 5):

sys.stdout.write("\r... %s%%" % i) # Обновляем индикатор

sys.stdout.flush() # Сбрасываем содержимое буфера

time.sleep(1) # Засыпаем на 1 секунду

sys.stdout.write("\rПроцесс завершен\n")

input()

Сохранение объектов в файл

>>> import pickle

>>> f = open(r"file.txt", "wb")

>>> obj = ["Строка", (2, 3)]

>>> pickle.dump(obj, f)

>>> f.close()

 

 

>>> f = open(r"file.txt", "rb")

>>> obj = pickle.load(f)

>>> obj

['Строка', (2, 3)]

>>> f.close()

 

Листинг 16.10. Сохранение нескольких объектов

>>> obj1 = ["Строка", (2, 3)]

>>> obj2 = (1, 2)

>>> f = open(r"file.txt", "wb")

>>> pickle.dump(obj1, f) # Сохраняем первый объект

>>> pickle.dump(obj2, f) # Сохраняем второй объект

>>> f.close()

 

Листинг 16.11. Восстановление нескольких объектов

>>> f = open(r"file.txt", "rb")

>>> obj1 = pickle.load(f) # Восстанавливаем первый объект

>>> obj2 = pickle.load(f) # Восстанавливаем второй объект

>>> obj1, obj2

(['Строка', (2, 3)], (1, 2))

>>> f.close()

 

 

>>> f = open(r"file.txt", "wb")

>>> obj = ["Строка", (2, 3)]

>>> pkl = pickle.Pickler(f)

>>> pkl.dump(obj)

>>> f.close()

 

 

>>> f = open(r"file.txt", "rb")

>>> obj = pickle.Unpickler(f).load()

>>> obj

['Строка', (2, 3)]

>>> f.close()

 

 

>>> obj1 = [1, 2, 3, 4, 5] # Список

>>> obj2 = (6, 7, 8, 9, 10) # Кортеж

>>> pickle.dumps(obj1)

b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'

>>> pickle.dumps(obj2)

b'\x80\x03(K\x06K\x07K\x08K\tK\ntq\x00.'

 

 

>>> pickle.loads(b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.')

[1, 2, 3, 4, 5]

>>> pickle.loads(b'\x80\x03(K\x06K\x07K\x08K\tK\ntq\x00.')

(6, 7, 8, 9, 10)

 

 

>>> import shelve # Подключаем модуль

>>> db = shelve.open("db1") # Открываем файл

>>> db["obj1"] = [1, 2, 3, 4, 5] # Сохраняем список

>>> db["obj2"] = (6, 7, 8, 9, 10) # Сохраняем кортеж

>>> db["obj1"], db["obj2"] # Вывод значений

([1, 2, 3, 4, 5], (6, 7, 8, 9, 10))

>>> db.close() # Закрываем файл

 

 

>>> db = shelve.open("db1")

>>> db.keys(), db.values()

(KeysView(<shelve.DbfilenameShelf object at 0x00FE81B0>),

ValuesView(<shelve.DbfilenameShelf object at 0x00FE81B0>))

>>> list(db.keys()), list(db.values())

(['obj1', 'obj2'], [[1, 2, 3, 4, 5], (6, 7, 8, 9, 10)])

>>> db.items()

ItemsView(<shelve.DbfilenameShelf object at 0x00FE81B0>)

>>> list(db.items())

[('obj1', [1, 2, 3, 4, 5]), ('obj2', (6, 7, 8, 9, 10))]

>>> db.close()

 

 

>>> db = shelve.open("db1")

>>> len(db) # Количество элементов

>>> "obj1" in db

True

>>> del db["obj1"] # Удаление элемента

>>> "obj1" in db

False

>>> "obj1" not in db

True

>>> db.close()



Поделиться:


Последнее изменение этой страницы: 2016-06-23; просмотров: 247; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.104.36 (0.006 с.)