Показаны сообщения с ярлыком python. Показать все сообщения
Показаны сообщения с ярлыком python. Показать все сообщения

вторник, 12 мая 2015 г.

What makes Python Awesome

by Raymond Hettinger
twitter: @raymondh



PyCon 2013
A bit of awesomeness in five minutes

# Search directory tree for all duplicate files
import os, md5, pprint

hashmap = {} # content signature -> list of filenames

for path, dirs, files in os.walk('.'):
    for filename in files:
        fullname = os.path.join(path, filename)
        with open(fullname) as f:
            d = f.read()
        h = hashlib.md5(d).hexdigest()
        filelist = hashmap.setdefault(h, [])
        filelist.append(fullname)
     
pprint.pprint(hashmap)

среда, 14 сентября 2011 г.

Как получить путь к папке CommonApplicationData ?

Вопрос: Как получить путь к папке CommonApplicationData ?
Ответ : Тестировалось на windows7 х64 полной комплектации



import ctypes
from ctypes import wintypes, windll
CSIDL_COMMON_APPDATA = 35
_SHGetFolderPath = windll.shell32.SHGetFolderPathW
_SHGetFolderPath.argtypes = [wintypes.HWND,
ctypes.c_int,
wintypes.HANDLE,
wintypes.DWORD, wintypes.LPCWSTR]
path_buf = wintypes.create_unicode_buffer(wintypes.MAX_PATH)
result = _SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, 0, path_buf)
print path_buf.value


пятница, 19 августа 2011 г.

Python libs for windows

мне периодически нужны библиотеки для WINDOWS.

я нашел неплохую подборку в сети .

python. генерация случайнго числа или буквы из заданного диапазона

Возник такой вопрос: Как случайным образом показывать числа из диапазона в python?

генератор случайных чисел из диапазона

import random

print random.randint(1, 10) # выводим случайное число из диапазона от 1 до 10

print random.choice("acdf'') # выводит случайную букву из букв acdf

Получить список всех папок и файлов v2. Python

3 апреля я писал о том как Получить список файлов в каталоге

сегодня я хочу разместить еще один вариант того как это можно сделать .

Как получить список всех папок и файлов в определенной директории? Очень просто – используя функцию os.walk()


import os
def getsubs(dir):
# get all
dirs = []
files = []
for dirname, dirnames, filenames in os.walk(dir):
dirs.append(dirname)
for subdirname in dirnames:
dirs.append(os.path.join(dirname, subdirname))
for filename in filenames:
files.append(os.path.join(dirname, filename))
return dirs, files


решение взято с сайта: http://ninjaside.info/2010/12/poluchit-spisok-vsex-papok-i-fajlov-python/

понедельник, 4 апреля 2011 г.

Python: Словарь

Dict = {} # пустой словарь

Dict = {'row': 4, 'col': 10, 'page': 'My page'} # словарь с элементами

print Dict['row'] # доступ к элементу словаря

# Проверка существования ключа

Dict.has_key('row') # False если ключ не существует

'row' in Dict #альтернативный способ проверки

Dict.keys() # вернуть все ключи имеющиеся в словаре в виде списка

Dict.values() # вернуть список значений в виде списка

Dict.items() # возвращает список в котором элементы - кортеж пар (ключ, значение) из словаря

Dict.copy() # копирование

Dict.get('ключ', 'значение по умолчанию') # если элемент с таким ключом отсутствует, будет возвращено значение по умолчанию

Dict.update(Dict2) # слияние

Dict.pop('ключ') # удалить элемент с ключом

len(Dict) # длинна словаря(количество элементов)

воскресенье, 3 апреля 2011 г.

Python: Получить список файлов в каталоге

Сразу прошу прощение за форматирования кода... @TODO : прикрутить модуль ! Допустим у нас на сервере есть каталог с файлами:

/var/www/mysite/files
photoes.zip
1.jpg
2.jpg
3.jpg
im.gif
document.pdf

Чтобы получить содержимое этого каталога в виде списка, можно воспользоваться встроенным модулем os:

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

#Каталог из которого будем брать файлы
directory = '/var/www/mysite/files'

#Получаем список файлов в переменную files
files = os.listdir(directory)

В результате files будет равна:

['photoes.zip', '1.jpg', '2.jpg', '3.jpg', 'im.gif', 'document.pdf']

Если нужно получить файлы только определенного типа, их можно отфильтровать по расширению:

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

#Каталог из которого будем брать изображения
directory = '/var/www/mysite/files'

#Получаем список файлов в переменную files
files = os.listdir(directory)

#Фильтруем список
images = filter(lambda x: x.endswith('.jpg'), files)

Теперь в переменной images такой список:

['1.jpg', '2.jpg', '3.jpg']

решение взято с сайта: http://tutorialbox.freelancing.lv/tutorials/6

Получить список файлов в каталоге v2


Немного магии от модуля os

os.walk() - возвращает объект-генератор. Из полученного объекта можно получить кортежи
для каждого каталога в переданной walk файловой иерархии. Каждый кортеж состоит из трех
элементов:

1. Абсолютный адрес очередного каталога (строка).
2. Имена (без адреса) подкаталогов первого уровня для текущего каталога (список).
3. Имена (без адреса) файлов данного каталога.

Посмотрим, как это работает. Допустим, у нас есть такое дерево каталогов:
tree = os.walk('/home/pl/mydir')
На что же ссылается tree? Попробуем просто получить данные, связанные с данной переменной.

print(tree)

В результате видим
< generator object walk at 0x00A8B620 >
Итак, есть объект-генератор. Поскольку полученный объект генерирует кортежи, количество
которых равно количеству каталогов в дереве, то можно их получить с помощью цикла for и,
например, вывести на экран

for d in tree:
print (d)

В соответствии с вышеуказанным деревом каталогов получится следующее:

('/home/pl/mydir', ['dir2a', 'dir2b'], ['mash187.pas', 'mash189.pas', 'menu_.php', 'xorg.conf', 'клав_тренажер.odt', 'Расписание 2004.xls'])
('/home/pl/mydir\\dir2a', ['dir3'], ['less1.doc', 'Patro_Nia.ogg', 'Расписание 2004.doc'])
('/home/pl/mydir\\dir2a\\dir3', [], ['bottom_.php', 'equador.mid', 'less1.html', 'net_Alt.txt', 'poly995.mid', 'top_.php'])
('/home/pl/mydir\\dir2b', [], ['clear.gif', 'fon1.jpg', 'logo4.png', 'okulov245.pas', 'okulov273.pas', 'plan1.jpg', 'plan2.jpg'])

Итак, налицо четыре кортежа (у нас четыре каталога – см. схему выше). Каждый кортеж
включает три элемента. Первый – это адрес каталога, второй – список поддиректорий не глубже
первого уровня, третий – список имен файлов. Если вложенных каталогов или файлов нет, то
соответствующий им список будет пуст.

Если мы еще раз запустим цикл с переменной tree, то уже ничего не получим. Дело в том,
что объект-генератор, с которым переменная была связана, уже был использован, он выдал
свое содержимое и больше его не содержит. Поэтому, если требуется сохранить кортежи для
последующий обработки, то лучше сохранить их, например, в списке:

>>> import os
>>> pdir = 'G:/projects/pythoner.info/pypath/mydir'
>>> contdir = []
>>> for i in os.walk(pdir):
contdir.append(i)

>>> for i in contdir:
print (i)

('G:/projects/pythoner.info/pypath/mydir', ['dir2a', 'dir2b'], ['mash187.pas', 'mash189.pas', 'menu_.php', 'sg30.thm', 'xorg.conf', 'клав_тренажер.odt', 'Расписание 2004.xls'])
('G:/projects/pythoner.info/pypath/mydir\\dir2a', ['dir3'], ['less1.doc', 'Patro_Nia.ogg', 'Thumbs.db', 'Расписание 2004.doc'])
('G:/projects/pythoner.info/pypath/mydir\\dir2a\\dir3', [], ['equador.mid', 'fon1.jpg', 'logo4.png', 'logos.bmp', 'net_Alt.txt', 'plan1.jpg', 'poly995.mid', 'Thumbs.db', 'top_.php'])
('G:/projects/pythoner.info/pypath/mydir\\dir2b', [], ['bottom_.php', 'clear.gif', 'less1.html', 'okulov245.pas', 'okulov273.pas', 'plan2.jpg', 'sg30.sdv'])

С помощью функции walk() можно получить имена файлов с тем, чтобы в дальнейшем с ними
что-нибудь делать с помощью других методов Python и его модулей. Получить их можно,
извлекая из третьего элемента каждого кортежа. Сделать это можно так, как показано ниже:

for d, dirs, files in os.walk('c:/mydir'):
for f in files:
print (f)

Переменная d в каждой итерации связывается с первым элементом каждого кортежа (строкой,
содержащей адрес каталога), dirs – со вторым элементом (списком подкаталогов), а files -
со списками файлов очередного каталога. Чтобы извлечь списки файлов целиком, а не
выделять каждый файл по отдельности, можно сделать так:

for d, dirs, files in os.walk('c:/mydir'):
print (files)

И получить:

['mash187.pas', 'mash189.pas', 'menu_.php', 'xorg.conf', 'клав_тренажер.odt', 'Расписание 2004.xls']
['less1.doc', 'Patro_Nia.ogg', 'Расписание 2004.doc']
['bottom_.php', 'equador.mid', 'less1.html', 'net_Alt.txt', 'poly995.mid', 'top_.php']
['clear.gif', 'fon1.jpg', 'logo4.png', 'okulov245.pas', 'okulov273.pas', 'plan1.jpg', 'plan2.jpg']

Имена файлов не полные. Они не содержат адреса, следовательно, для операций с файлами
таких списков не достаточно. Для получения полных адресов подойдет функция
os.path.join(). С ее помощью можно объединить первый элемент кортежа, содержащий полный
путь, с именем каждого файла:
>>> path_f = []
>>> for d, dirs, files in os.walk('c:/mydir'):
for f in files:
path = os.path.join(d,f) # формирование адреса
path_f.append(path) # добавление адреса в список


>>> path_f
['c:/mydir\\mash187.pas', 'c:/mydir\\mash189.pas', 'c:/mydir\\menu_.php', 'c:/mydir\\xorg.conf', 'c:/mydir\\клав_тренажер.odt', 'c:/mydir\\Расписание 2004.xls', 'c:/mydir\\dir2a\\less1.doc', 'c:/mydir\\dir2a\\Patro_Nia.ogg', 'c:/mydir\\dir2a\\Расписание 2004.doc', 'c:/mydir\\dir2a\\dir3\\bottom_.php', 'c:/mydir\\dir2a\\dir3\\equador.mid', 'c:/mydir\\dir2a\\dir3\\less1.html', 'c:/mydir\\dir2a\\dir3\\net_Alt.txt', 'c:/mydir\\dir2a\\dir3\\poly995.mid', 'c:/mydir\\dir2a\\dir3\\top_.php', 'c:/mydir\\dir2b\\clear.gif', 'c:/mydir\\dir2b\\fon1.jpg', 'c:/mydir\\dir2b\\logo4.png', 'c:/mydir\\dir2b\\okulov245.pas', 'c:/mydir\\dir2b\\okulov273.pas', 'c:/mydir\\dir2b\\plan1.jpg', 'c:/mydir\\dir2b\\plan2.jpg']

Пример имеет, скорее всего, демонстрирующее, а не практическое значение, т.к.
результирующий список содержит повторяющиеся части строк. Поэтому лучше напрямую работать с
кортежем, извлеченным из объекта-генератора.

среда, 31 марта 2010 г.

Dzen python

  • Красивое лучше, чем уродливое.
  • Явное лучше, чем неявное.
  • Простое лучше, чем сложное.
  • Сложное лучше, чем запутанное.
  • Плоское лучше, чем вложенное.
  • Разреженное лучше, чем плотное.
  • Читабельность имеет значение.
  • Особые случаи не настолько особые, чтобы нарушать правила.
  • Хотя практичность побеждает стремление к чистоте.
  • Ошибки никогда не должны замалчиваться.
  • Если не замалчиваются явно.
  • Если видишь двусмысленность, отбрось искушение угадать.
  • Должен существовать один — и, желательно, только один — очевидный способ сделать это.
  • Хотя он поначалу может быть и не очевиден, если вы не голландец.*
  • Сейчас лучше, чем никогда.
  • Хотя никогда зачастую лучше, чем прямо сейчас.
  • Если реализацию сложно объяснить — идея плоха.
  • Если реализацию легко объяснить — идея, возможно, хороша.
  • Пространства имён, черт возьми, — отличная штука! Будем делать их побольше!
* Шутливый намек на национальность Гвидо