Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 25.07.2017, 09:24   #1
tonchikp
Пользователь
 
Аватар для tonchikp
 
Регистрация: 16.07.2016
Адрес: Россия
Сообщений: 15
Репутация: 10
Отправить сообщение для tonchikp с помощью MSN
Вопрос Борьба с нехорошими символами в именах файлов

Уважаемые форумчане! Требуется ваша помощь!

Хочу разобраться с файловым хранилищем, удалить дубликаты файлов. Написал программу обходящую дерево директорий. Застрял на этапе вычисления хэшей, дело в том, что имена файлов содержат не только алфавитные символы и цифры, а также пробелы и спецсимволы. Сначала Python останавливался на первом же проблемном файле, позже я дописал try / except, и теперь он доходит до конца, пропуская проблемные файлы, но меня это не устраивает!

Язык: Python 3

Код:
#! /usr/bin/env python3

import subprocess

try:
    hash = subprocess.check_output('md5sum -- "{}"'.format(file), universal_newlines=True, shell=True)[:32]

except Exception:
    print('Проблемный файл {}'.format(file))
С hashlib пока не получается, проблем много создаёт, поэтому пока пришлось воспользоваться стандартной утилитой md5sum. Может подскажете заодно как решить проблему с применением hashlib.
__________________
Изучаю Python3. Добавляйтесь в друзья: tonchikp@jabberon.net
tonchikp вне форума   Ответить с цитированием
Старый 26.07.2017, 03:37   #2
pyuser
Новичок
 
Регистрация: 26.06.2017
Сообщений: 2
Репутация: 66
По умолчанию

Код:
import hashlib

def md5(fname):
    """ Возвращает контрольную сумму файла """

    result = hashlib.md5()
    with open(fname, "rb") as f:
        while True:
            d = f.read(8192)
            if not d:
                break
            result.update(d)
    return result.hexdigest()
pyuser вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет количества phone в уникальных именах Parallelogram SQL, базы данных 13 18.04.2016 15:02
Как выбрать файлы по дате в именах и заархивировать их? GorSHOK1 Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 4 21.10.2015 23:04
Apache и кодировка в именах файлов Serge_Bliznykov HTML и CSS 8 17.03.2015 17:56
сбой в именах файлов Tadjik Операционные системы общие вопросы 1 27.09.2010 11:13
Что означает буква A в именах параметров? mutabor Общие вопросы Delphi 12 28.03.2010 11:12


23:12.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.