Инструменты пользователя

Инструменты сайта


python_rabota_s_fajlami

Работа с файлами

Эта маленькая статья на простых примерах покажет, как работать с файлами ипользуя стандартную библиотеку Python.
(Некоторые примеры требуют Python 2.3 и выше).

Для работы с файлами в основном применяется модуль os. Далее, для перемещения и копирования файлов мы будем
использовать модуль shutil, для сравнения файлов - filecmp, для поиска по образцу - glob . А пока импортируем os.

import os

Обработка пути к файлу

os.path.join(r'c:\home', 'index.html') # соединение пути
# возвращает r'c:\home\index.html'
os.path.split(r'c:\home\index.html') # разделение пути
# возвращает (r'c:\home', 'index.html')

Как узнать, существует ли данный путь?

path = 'index.html'
if os.path.exists(path):
    print path, ' exists'

Как определить, данный путь - это файл или директория?

if os.path.isfile(path):
    print path, ' is file'
elif os.path.isdir(path):
    print path, ' is directory'

Получаем свойства файла.

from datetime import datetime   # для преобразования даты в приемлемый формат
size = os.path.getsize(path)    # размер файла в байтах
ksize = size//1024              # размер в килобайтах
atime = os.path.getatime(path)  # дата последнего доступа в секундах с начала эпохи
mtime = os.path.getmtime(path)  # дата последней модификации в секундах с начала эпохи
print 'Size: ', ksize, ' KB'
print 'Last access date: ', datetime.fromtimestamp(atime)
print 'Last modification date: ', datetime.fromtimestamp(mtime)

Стандартные операции с файлами

import shutil
os.rename('index.html','index2.html')     # переименовать
shutil.copy('index2.html','index.html')   # копировать
shutil.move('index2.html', 'index3.html') # переместить
os.remove('index3.html')                  # удалить

Сравнение двух файлов

import filecmp
eq = filecmp.cmp('index.html', 'index3.html') # сравнить файлы
if eq:
    print 'equal'
else:
    print 'not equal'

Обработка всех файлов в директории

dir = 'c:\home'
names = os.listdir(dir)   # список файлов и поддиректорий в данной директории
for name in names:
    fullname = os.path.join(dir, name)  # получаем полное имя
    if os.path.isfile(fullname):        # если это файл...
        print fullname                  # делаем что-нибудь с ним

Обработка всех файлов в директории рекурсивно (включая все поддиректории)

dir = 'c:\home'
for root, dirs, files in os.walk(dir): # пройти по директории рекурсивно
    for name in files:
        fullname = os.path.join(root, name) # получаем полное имя файла
        print fullname                      # делаем что-нибудь с ним

Здесь os.walk - это итератор, который проходит по директориям рекурсивно, и возвращает для каждой директории кортеж из трёх значений:

root - имя текущей директории

dirs - имена поддиректорий в текущей директории

files - имена файлов в текущей директории

Получение списка файлов, совпадающих с образцом

import glob
names = glob.glob('c:\home\*')     # все файлы и поддиректории в "с:\home"
names = glob.glob('c:\home\*.txt') # только с расширением "txt"
for name in names:
    if os.path.isfile(name):  # если это файл (а не директория)
        print name            # делаем что-нибудь с ним

Вот наверно и все основные операции с файлами. А если Вам понадобится произвести какие-то другие действия над файлами, обратитесь к стандартной документации Python.

Источники:

purepython.narod.ru
python_rabota_s_fajlami.txt · Последние изменения: 2009/12/19 21:49 (внешнее изменение)

Яндекс.Метрика