0 / 0 / 0
Регистрация: 12.11.2021
Сообщений: 7

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

31.01.2023, 14:39. Показов 2441. Ответов 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,323
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,323
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,323
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,323
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru