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

os.path, а именно join и relpath

02.04.2020, 13:34. Показов 2803. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
import os
import zipfile
 
z = zipfile.ZipFile('123.zip', 'w')
 
for folder, subfolders, files in os.walk('C:\\Users\\Stas\\Documents\\Обучение Python'): 
    for file in files:
        if file.endswith('.py'):
            z.write(os.path.join(folder, file), os.path.relpath(os.path.join(folder,file), 'C:\\Users\\Stas\\Documents\\Обучение Python'))
z.close()
Как в данном коде работают эти строки?:

Python
1
z.write(os.path.join(folder, file), os.path.relpath(os.path.join(folder,file), 'C:\\Users\\Stas\\Documents\\Обучение Python'))
Если можно, то пожалуйста, объясните как для ребенка, я только начинаю программировать и этот язык для меня первый.

Код если что работает так: Я создаю архив под названием 123.zip и добавляют туда все файлы из этого пути - C:\\Users\\Stas\\Documents\\Обучение Python
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2020, 13:34
Ответы с готовыми решениями:

os.path.relpath()
Разжуйте зачем нужна функция os.path.relpath(),я лишь понял что в итоге она возвратит строку с относительным путем.

Нужно расшифровать параметры команды Join-Path
Уважаемые форумчане, помогите расшифровать строчку кода. Код работал, но после НГ в имени файлов которые код обрабатывал произошло...

Сокращение пути к файлу, x:\path\path\...\path
Помогите с решением такой задачи, желательно до четверга)): Строка длиной не более 1000 символов содержит полный путь к файлу в формате...

6
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.04.2020, 13:59
Открой IDLE или IDE и просто поэксперементируй.
Зачем ждать ответа, когда его можно узнать самостоятельно?
Что тебе мешает написать в консоли os.path.join('1','2','3')
и посмотреть что будет?
То же самое с realpath.

Добавлено через 1 минуту
Цитата Сообщение от Dathris Посмотреть сообщение
я только начинаю программировать и этот язык для меня первый.
Здесь это не проходит. Если ты дитё - учись по книжкам. Кашку в ротик никто ложкой класть не будет.

Добавлено через 9 минут
------------------------------------------------------
realpath нужен, чтобы разруливать относительные пути и превращать их в абсолютные:
Python
1
2
3
4
5
6
7
8
9
10
>>> os.path.realpath('scripts')   # каталог Scripts в текущем каталоге
'D:\\INSTALL\\Python38-32\\Scripts'  # получаем полный путь
>>> 
>>> os.path.realpath('.')     # текущий путь
'D:\\INSTALL\\Python38-32' 
>>> os.path.realpath('..')   # путь до родительского каталога
'D:\\INSTALL'
>>> os.path.realpath('../../') # путь выше на два каталога
'D:\\'
>>>
1
-11 / 1 / 0
Регистрация: 08.03.2020
Сообщений: 132
02.04.2020, 14:11  [ТС]
Ну. Я понял что они делают. Но в коде как они вообще работают не понимаю.

Добавлено через 5 минут
Вот только у меня RELpath.

И не надо придираться к словам. Я имел ввиду, что не надо использовать какие-то внеземные термины, я их совершенно не понимаю.

Я и так учусь по книжке. Там попалась задача, сейчас её активно решаю.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.04.2020, 14:54
А, у тебя там relpath, а не realpath.
relpath работает противоположным образом.
Из абсолютных путей делает относительные.

Python
1
2
3
>>> os.path.relpath('D:\\INSTALL\\Python38-32')
'.'
>>>
Цитата Сообщение от Dathris Посмотреть сообщение
Но в коде как они вообще работают не понимаю.
Для этого есть такая штука как отладка.
Не понимаешь, что у тебя получается в качестве значений?
Возьми и выведи их в консоль.

Добавлено через 3 минуты
Вообще в коде много лишнего.
Зачем два раза писать 'C:\\Users\\Stas\\Documents\\Обучение Python' если можно один раз записать в переменную и потом пользоваться ей?
Зачем вообще использовать второй раз этот путь для relpath? У нее второй аргумент необязательный.
Да и вообще с этими путями такое нагромождение в коде.

Добавлено через 10 минут
Вот как записывается архив без всяких извращений с путями:
Python
1
2
3
4
5
6
7
8
9
10
import os, zipfile
source = r'd:\test'
target = r'd:\3\spam.zip'
 
with  zipfile.ZipFile(target, 'w', zipfile.ZIP_DEFLATED) as arch:
    for root, dirs, files in os.walk(source):
        for tarfile in files:
            if tarfile != '':
                print(root,'|',tarfile) # для отладки
                arch.write(os.path.join(root,tarfile))
Добавлено через 21 минуту
В общем, не знаю из какой дурацкой книжки ты взял этот код, но он очень плохой.
Разберем строчку:
Python
1
2
3
4
5
6
7
z.write(
    os.path.join(folder, file),    # склеиваем в полный путь
    #зачем-то используем второй аргумент функции write <arcname>, когда он нафиг никогда не нужен
    os.path.relpath(
        os.path.join(folder,file),  #опять склевиаем в полный путь. Неужели нельзя сделать это один раз и положить в переменную?
        'C:\\Users\\Stas\\Documents\\Обучение Python')  # стартовый путь относительно которого вычисляем
)
Что получается в параметре arcname:
Python
1
2
3
4
5
>>> os.path.relpath(
        'C:\\Users\\Stas\\Documents\\Обучение Python\\1234.py',
    start='C:\\Users\\Stas\\Documents\\Обучение Python'
    )
'1234.py' # получаем базовое имя файла. Ну и зачем нам это было нужно?
Из справки:
имя arcname (по умолчанию это будет то же самое, что и имя файла, но без буквы диска и с удаленными разделителями ведущих путей).
1
-11 / 1 / 0
Регистрация: 08.03.2020
Сообщений: 132
02.04.2020, 15:45  [ТС]
Чуть переделал код как вы сказали.

Теперь наконец-то всё понятно за исключением одного - скрипт не сжимает в архив файлы находящиеся в папке. Подскажите если не сложно как это сделать.

Python
1
2
3
4
5
6
7
8
9
10
11
import os
import zipfile
 
z = zipfile.ZipFile('123.zip', 'w')
path = 'C:\\Users\\Stas\\Documents\\Обучение Python'
 
for folder,subfolder, files in os.walk(path): 
    for file in files:
        z.write(file)
        
z.close()
Добавлено через 2 минуты
А хотя не то сказал. Он скорее выдает ошибку о том, что не может найти файлы находящиеся в папке. При этом выводит в консоль имя файла, который и надо сжать
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.04.2020, 15:49
Лучший ответ Сообщение было отмечено Dathris как решение

Решение

z.write(file) => z.write(os.path.join(folder,file))
1
-11 / 1 / 0
Регистрация: 08.03.2020
Сообщений: 132
02.04.2020, 15:55  [ТС]
Огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2020, 15:55
Помогаю со студенческими работами здесь

The path you have specified (D:\Program Files) is invalid. The Oracle Home path may not contain spaces.
Возникла проблема с установкой Oracle9i Database 9.0.1.1.1 ОС: Windows XP Professional SP3 Запускаю установщик, окно расположение...

Raphael.js карта - добавить polygon или path по клику на path рисунка карты
С наступившим, Форумчане Есть интерактивная карта, подгружаемая через библиотеку Raphael.js, по клику на объекты которой выходит...

Открыть файл при нажать на область <path></path>
Доброго времени суток) Подскажите пожалуйста, не могу найти ответ в интернете. У меня есть интерактивная карта, в ней каждая область...

INNER JOIN ,LEFT OUTER JOIN,RIGHT OUTER JOIN внутреннее соединение таблиц
Доброго времени суток возник следующий вопрос CREATE TABLE IF NOT EXISTS `sms` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `author`...

[WPF] "Path" является неоднозначной ссылкой между "System.Windows.Shapes.Path" и "System.IO.Path"
Здравствуйте! Делаю экспорт из программы в Excel. Код брался от WinForm, немного переписал. Задача была следующей: взять запись из...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru