Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 12.11.2021
Сообщений: 7

Обрезать имена файлов

31.01.2023, 14:39. Показов 2428. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Нужна помощь в решении задачи.
Есть каталог, в котором есть подкаталоги с папками и файлами. Необходимо сделать архивацию подкаталогов с помощью zipfile и удалить исходные папки после архивации.
Вот что я сделал:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os, shutil, zipfile
 
# Источник \ Назначение бэкапа
source = 'D:\\UsersFolder'
target = 'D:\\ArchiveFolder'
 
# Текущий год служит именем подкаталога в основном каталоге target
y = target + os.sep + time.strftime('%Y')
if not os.path.exists(y):
    os.mkdir(y)
 
# Для shutil.rmtree
def rm_readonly(fn, path, excinfo):
    os.chmod(path, stat.S_IWRITE)
    fn(path)
 
# Представление содержимого папки D:\\UsersFolder в виде списка
l1 = os.listdir(source)
 
# Архивация подпапок с их содержимым
for i in l1:
    path = source + os.sep + i
    target = y + os.sep + i + '.zip'
    zipf = zipfile.ZipFile(target, 'w', zipfile.ZIP_DEFLATED)
    if os.path.exists(path):
        for root, dirs, files in os.walk(path):
            for fname in files:
                filepath = os.path.join(root, fname)
                filepathrel = os.path.relpath(filepath, path)
                zipf.write(filepath, filepathrel)
 
        zipf.close()
# Удалить исходную папку, если архив есть
        if os.path.exists(target):
            shutil.rmtree(path, onerror=rm_readonly)
Проблема заключается в том, что в папках имеются файлы, имена которых 155 символов, соответственно zipfile либо shutil генерируют ошибку о том, что системе не удается найти указанный путь и на этом выполнение программы останавливается.
Вопрос в том, как можно предварительно обработать такие файлы (возможно представить имена таких файлов как строки и обрезать их. Если это так, то можно пример реализации, потому что сам я не понимаю как это сделать) и затем уже беспроблемно обработать???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.01.2023, 14:39
Ответы с готовыми решениями:

Русские имена файлов
Только в PHP7, насколько знаю, появилась возможность размещать файлы с русскими именами на сервере, а до этого, чтобы ссылки работали, надо...

Обрезать имена всех файлов в папке и подпапках до определенного размера
помогите с такой задачкой. мне нужно перебрать все файлы в папке и ее подпапках и обрезать их имя вплоть до заданного количества символов: ...

Создать файл, содержащий имена всех файлов системы, созданных в текущем месяце, имена пользователей, их создавших
Через командную строку необходимо: Создать файл, содержащий имена всех файлов системы, созданных в текущем месяце, имена пользователей,...

12
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,321
31.01.2023, 15:13
Цитата Сообщение от Mikhxil Посмотреть сообщение
имеются файлы, имена которых 155 символов
лучше не иметь таких
Цитата Сообщение от Mikhxil Посмотреть сообщение
как можно предварительно обработать такие файлы
циклом вестимо
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
31.01.2023, 15:41
Цитата Сообщение от Mikhxil Посмотреть сообщение
возможно представить имена таких файлов как строки и обрезать их
Конечно, возможно. А обрезать как? И что делать, если в случае такого усекновения имена файлов будут совпадать?
0
0 / 0 / 0
Регистрация: 12.11.2021
Сообщений: 7
31.01.2023, 16:50  [ТС]
У меня такой вопрос тоже возникает, но придумать алгоритм не могу, поскольку мало опыта в этом вопросе. Возможно сделать какой-то автогенератор, который после усечения имени файла добавлял бы ,например, в начало имени произвольно сгенерированную цифру. Даже если это и так, то не представляю как это реализовать в коде. Гугление не помогло.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,321
31.01.2023, 17:29
Цитата Сообщение от Mikhxil Посмотреть сообщение
после усечения имени файла добавлял бы
может нужно называть вещи своими именами?
переименовать файл путём усечения части его имени
или
усечь строку, являющуюся именем файла
??
0
0 / 0 / 0
Регистрация: 12.11.2021
Сообщений: 7
31.01.2023, 18:12  [ТС]
Вообще изначально вопрос был про работу с именами файлов большой длины. А дальше было сделано предложение представить имена файлов как строки и уже работать со строками. Не знаю насколько это верное предположение. Так что пытаюсь узнать у знающих людей как лучше сделать.
0
132 / 96 / 40
Регистрация: 24.03.2022
Сообщений: 357
31.01.2023, 22:50
Python
1
2
3
4
5
import os
 
...
 
os.rename('объект для переименования', 'новое имя')
или с обрезанием строки и добавлением даты
Python
1
2
3
4
5
6
7
8
import os
from datetime import date
 
...
 
s = 'strokasdfgsdgsdfgsdfgsdfgsdfgsdfg'
current_date = date.today()
os.rename('объект для переименования', f'{s[:6:]}{current_date}')
0
0 / 0 / 0
Регистрация: 12.11.2021
Сообщений: 7
01.02.2023, 06:45  [ТС]
Возникает аналогичная ошибка при использовании os.rename (такая же как и при использовании zipfile/shutil): FileNotFoundError: [WinError 2] Не удается найти указанный файл: 'dfdfgdfg5rij5689hjgfnhfgnjnb89j6b9568jb gfmbnuifbn89j69056bj9056bjofgmfb.pdf'
0
132 / 96 / 40
Регистрация: 24.03.2022
Сообщений: 357
01.02.2023, 08:37
Слишком длинный путь

Добавлено через 51 минуту
Цитата Сообщение от Mikhxil Посмотреть сообщение
Не удается найти указанный файл: 'dfdfgdfg5rij5689hjgfnhfgnjnb89j6b9568jb gfmbnuifbn 89j69056bj9056bjofgmfb.pdf'
Такое имя - не проблема. Это вы скопировали прям с IDE? Значит неправильный путь указан.
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,321
01.02.2023, 09:28
в сухом остатке независимо от длины имени файла его=файл всё равно нужно обрабатывать?
0
0 / 0 / 0
Регистрация: 12.11.2021
Сообщений: 7
01.02.2023, 09:51  [ТС]
piton21, нет, это я для примера произвольно назвал файл, сделав акцент на длине имени файла(В моем случае имя файла состоит из слов с русскими буквами, цифрами и пробелами). Таким образом получается что выполнение программы останавливается из-за ошибки на этом файле, т.е. другие файлы, у которых короткое имя, обрабатываются без проблем.(т.е. часть архива успевает сформироваться)
Ципихович Эндрю, да независимо от длины имени файла его=файл всё равно нужно обрабатывать.(По крайней мере, хотелось бы).
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,321
01.02.2023, 09:54
Цитата Сообщение от Mikhxil Посмотреть сообщение
Ципихович Эндрю, да независимо от длины имени файла его=файл всё равно нужно обрабатывать.(По крайней мере, хотелось бы).
отстаньте от его имени - обрабатывайте циклом и точка
0
132 / 96 / 40
Регистрация: 24.03.2022
Сообщений: 357
01.02.2023, 14:57
Только что переименовал файл с длиной имени 253 символа без проблем. Путь у вас указан неверно в коде, проверяйте.
Python
1
2
3
4
5
6
7
import os
 
s = 'nhfgnjnb89j6b95668jbgfmbnuifbn 89j69056bj9056bjofgmfbdfdfgdfg589hjgfnhfgnjnb89j6bfmbnuifbn 89j69056bj9056bjofgmfbgmfb.txt6b9568jbgfm6b9568jbgfmbnuifbn 89j69056bj9056bjofgmfbdfdfgdfg5rij5689hjgfnhfgnjnb89j6b9568jbgfmbnuifbn 89j69056bj9056bjofgmfbgmfb.txt'
print(len(s))
 
for root, dirs, files in os.walk('.'):
    os.rename('nhfgnjnb89j6b95668jbgfmbnuifbn 89j69056bj9056bjofgmfbdfdfgdfg589hjgfnhfgnjnb89j6bfmbnuifbn 89j69056bj9056bjofgmfbgmfb.txt6b9568jbgfm6b9568jbgfmbnuifbn 89j69056bj9056bjofgmfbdfdfgdfg5rij5689hjgfnhfgnjnb89j6b9568jbgfmbnuifbn 89j69056bj9056bjofgmfbgmfb.txt', '123.txt')
Миниатюры
Обрезать имена файлов  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2023, 14:57
Помогаю со студенческими работами здесь

Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов
Всем доброго времени суток!:) Подскажите, пожалуйста, как переименовать файл с расширением pdf, взяв сам текст для наименования файла из...

В определенной директории, прочитать все имена файлов и создать папки, с названиями этих файлов
В общем Моя задача, в определенной директории, прочитать все имена файлов и создать папки, с названиями этих файлов. Вот код: namespace...

Отобразить имена файлов с иконками, соответствующими расширению файлов
Всем привет! Помогите, пожалуйста, решить такую задачу: имеется некий список имен файлов и необходимо отобразить эти имена с иконками,...

Сравнить содержимое файлов между собой, и если оно совпадает, то вывести на экран имена этих файлов
Прошу помощи у знающих людей. Существует 2 массива, содержащих названия файлов.Требуется сравнить содержимое файлов между собой, и если...

Даны имена четырех файлов. Найти количество файлов с указанными именами, которые имеются в текущем каталоге
. Даны имена четырех файлов. Найти количество файлов с указанными именами, которые имеются в текущем каталоге. На языке Java.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru