Удалить файлы Google Диска по расширению с помощью PyDrive

Я пытаюсь удалить все файлы с расширением «.pdf» из папки на диске Google. С аутентификацией по API все в порядке, могу загружать файлы. Проблема в удалении.

Здесь я загружаю

upload_file = 'Test1.pdf'
gfile = drive.CreateFile({'parents': [{'id': '11SsSKYEATgn_VWzSb-8RjRL-VoIxvamC'}]})
gfile.SetContentFile(upload_file)
gfile.Upload()

Вот пытаюсь удалить

delfile = drive.CreateFile({'parents': [{'id': '11SsSKYEATgn_VWzSb-8RjRL-VoIxvamC'}]})
filedel = "*.pdf"
delfile.SetContentFile(filedel)
delfile.Delete()

Ошибка:

Traceback (most recent call last):
  File "C:/Users/linol/Documents/ProjetoRPA-Python/RPA-TESTE.py", line 40, in <module>
    delfile.SetContentFile(filedel)
  File "C:\Users\linol\Documents\ProjetoRPA-Python\venv\lib\site-packages\pydrive\files.py", line 175, in SetContentFile
    self.content = open(filename, 'rb')
OSError: [Errno 22] Invalid argument: '*.pdf'

person Lino Costa    schedule 06.05.2021    source источник
comment
Почему бы не запустить google colab, подключиться к диску и запустить !find '/content/drive/MyDrive' -type f -name '*.pdf' -delete?   -  person RJ Adriaansen    schedule 06.05.2021
comment
Приведенные выше коды являются лишь частью почти 100 строк кода. Я использую PyCharm   -  person Lino Costa    schedule 07.05.2021


Ответы (1)


Я считаю вашу цель и вашу нынешнюю ситуацию следующим образом.

  • Вы хотите удалить файлы PDF-файла в определенной папке.
  • Вы хотите добиться этого, используя pydrive для python.
  • Вы уже могли получать и помещать значения для Google Диска с помощью Drive API.

В этом случае я хотел бы предложить следующий поток.

  1. Получить список файлов PDF-файла из определенной папки.
  2. Удалите файлы, используя список файлов.

Когда вышеуказанный поток отражается в сценарии, он становится следующим.

Пример сценария:

Измените ### на идентификатор вашей папки.

# 1. Retrieve file list of PDF file from the specific folder.
fileList = drive.ListFile({'q': "'###' in parents and mimeType='application/pdf'"}).GetList()

# 2. Delete the files using the file list.
for e in fileList:
    drive.CreateFile({'id': e['id']}).Trash()
    # drive.CreateFile({'id': e['id']}).Delete() # When you use this, the files are completely deleted. Please be careful this.
  • Этот пример скрипта извлекает файлы, используя mimeType. Если вы хотите получить файлы, используя имя файла, вы также можете использовать fileList = drive.ListFile({'q': "'###' in parents and title contains '.pdf'"}).GetList().
  • ВАЖНО. В этом примере скрипта при использовании Delete() файлы полностью удаляются с Google Диска. Итак, сначала я хотел бы порекомендовать использовать Trash() вместо Delete() в качестве теста скрипта. При этом файлы не удаляются, а перемещаются в корзину. По этому я подумал, что можно протестировать скрипт.

Примечание:

  • Похоже, что PyDrive использует Drive API v2. Пожалуйста, будьте осторожны с этим.

Справка:

person Tanaike    schedule 07.05.2021
comment
Я сделал процесс выше, исследуя ссылки, код не выдает ошибку, но не удаляет файлы. - person Lino Costa; 12.05.2021
comment
При попытке печати (списка файлов) в терминале ничего не возвращается - person Lino Costa; 12.05.2021
comment
@Lino Costa Спасибо за ответ. Я прошу прощения за неудобства. К сожалению, я не могу повторить вашу ситуацию. В моей среде, когда я тестировал вышеприведенный скрипт, я могу подтвердить, что файлы могут быть удалены. Прошу прощения за это. Из When trying a print (filelist), nothing returns in the terminal в этом случае похоже, что файлы не получены. Я думаю, что причина вашей текущей проблемы связана с этим. Итак, вы можете еще раз подтвердить свой текущий скрипт и свою папку? Когда файлы PDF помещаются в папку, список файлов имеет значение. - person Tanaike; 12.05.2021
comment
@Lino Costa Например, если в вашем PDF-файле нет mimeType application/pdf, при тестировании fileList = drive.ListFile({'q': "'###' in parents and title contains '.pdf'"}).GetList(), о котором я уже упоминал, какой результат вы получите? Кстати, ваша папка находится на общем Диске или на вашем Гугл Диске? - person Tanaike; 12.05.2021
comment
Сейчас сделаю остальные тесты. Файлы находятся в общей папке на Google Диске. - person Lino Costa; 12.05.2021
comment
Мне удалось решить... Мне нужно было создать новый "credentials_file" и изменить "oauth_scope" в settings.yaml. После этого код работал хорошо. Спасибо за вашу помощь - person Lino Costa; 13.05.2021
comment
@Lino Costa Добро пожаловать. Спасибо, что сообщили мне об этом. Я рад, что ваша проблема была решена. Если ваш вопрос был решен, пожалуйста, нажмите кнопку «Принять». Другие люди, у которых есть та же проблема, что и вы, также могут основывать ваш вопрос на вопросе, который можно решить. И я думаю, что ваш вопрос и решение будут для них полезны. Если вы не найдете кнопку, не стесняйтесь сказать мне. stackoverflow.com/help/accepted-answer - person Tanaike; 13.05.2021
comment
@Lino Costa Спасибо за ваш ответ. - person Tanaike; 13.05.2021