Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2018 11:29:40

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Неверный путь к файлу

Доброго времени суток
Учебная задача: имеется папка с файлами, имена которых состоят из префикса, номера и расширения. Нужно написать программу, которая ищет эти файлы и “создаёт пропуск в нумерации” (этот момент я понял как удаление одного из пронумерованных файлов)

 import os, re, random, send2trash
path = 'D:\\Downloads\Python\\Learn\Automation of routine tasks\\Ch 9\\Educational project - Filling of gaps in file numbering\\Files'
pref = input('Введите префикс: ')
fileList = []
for folders, subfolders, files in os.walk(path):      # Знаю, тут можно было обойтись циклом по os.listdir()
      for file in files:
            if file.startswith(pref):
                  fileList.append(os.path.abspath(file))
delFile = random.choice(fileList)
print(delFile)
#send2trash.send2trash(delFile)
С помощью print(delFile) я вижу, что в списке элементы следующего вида:
D:\Downloads\Python\Learn\Automation of routine tasks\Ch 9\Educational project - Filling of gaps in file numbering\spam020.txt
Однако, в заданном пути ещё имеется каталог Files. Почему же тогда он отсутствует в элементах списка?

Офлайн

#2 Март 21, 2018 14:50:26

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Неверный путь к файлу

Решил проблему с помощью os.chdir() перед циклом по файлам:

 import os, re, random, send2trash
path = 'D:\\Downloads\Python\\Learn\Automation of routine tasks\\Ch 9\\Educational project - Filling of gaps in file numbering\\Files'
pref = input('Введите префикс: ')
fileList = []
os.chdir(path)
for file in os.listdir(path):              # Таки заменил цикл
      print(os.path.abspath(file))
      if file.startswith(pref):
            fileList.append(os.path.abspath(file))
delFile = random.choice(fileList)
print(delFile)
send2trash.send2trash(delFile)
А вот уже другой учебный проект с использованием os.walk(), где помогло аналогичное решение:
 import os, send2trash
path = 'D:\\Downloads\\Python\\Learn\\Automation of routine tasks\\Ch 9\\Educational project - Deleting unnecessuary files\\Catalog'
for folder, subfolders, files in os.walk(path):
      os.chdir(folder)
      for file in files:
            if file.endswith('.jpg') and os.path.getsize(os.path.abspath(file)) > 500000:
                  print('Будет удалён файл - ' + file)
                  send2trash.send2trash(os.path.abspath(file))

Офлайн

#3 Март 22, 2018 04:36:43

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Неверный путь к файлу

 for path, dirs, files in walk(root):
    for filename in files:
        if filename.startswith(pref):
            file_list.append(os.path.join(path, filename))



Отредактировано pyuser (Март 22, 2018 04:37:08)

Офлайн

#4 Март 22, 2018 08:28:50

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Неверный путь к файлу

pyuser, опробовал, спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version