Почему Google Drive API (pydrive) не работает с shutil.move? - PullRequest
0 голосов
/ 08 января 2020

У меня есть простой Python скрипт, который предназначен для создания папки в каталоге Windows, загрузки некоторых файлов на Google Drive, а затем перемещения файлов во вновь созданную папку и удаления исходного исходного файла.

Казалось, что все работало, как планировалось, когда я изначально писал сценарий, за исключением того факта, что я фактически не передавал данные на диск Google с помощью команды SetContentFile из pydrive. Как только я добавил это, я заметил, что shutil.move копировал файлы, но не смог удалить исходные файлы. Я не мог понять, почему, поэтому я решил переместить shutil.move в отдельное предложение l oop, и это, похоже, решило большую часть моей проблемы. Теперь он копирует все мои файлы в новую папку, как и ожидалось, но не может удалить самый последний исходный файл из папки root.

Когда я пытаюсь запустить cmd без pass, он говорит мне, что файл все еще открыт каким-то другим процессом. Что может быть причиной этого и как я могу решить эту проблему? Кроме того, почему SetContentFile и shutil.move не работают в одном предложении l oop? Любая помощь будет оценена!

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import glob,os,shutil
import datetime, time

os.chdir(os.path.dirname(os.path.abspath(__file__)))

gauth = GoogleAuth()
#gauth.LocalWebserverAuth()

# Try to load saved client credentials
gauth.LoadCredentialsFile("mycreds.txt")
if gauth.credentials is None:
    # Authenticate if they're not there
    gauth.LocalWebserverAuth()
elif gauth.access_token_expired:
    # Refresh them if expired
    gauth.Refresh()
else:
    # Initialize the saved creds
    gauth.Authorize()
# Save the current credentials to a file
gauth.SaveCredentialsFile("mycreds.txt")

drive = GoogleDrive(gauth)

fid = '[FOLDER ID PLACEHOLDER]'

#Check to see if today's folder is created 
date = datetime.date.today()
today = date.strftime('%Y-%m-%d')

starting_folder = '[INSERT STARTING FOLDER]'

if not os.path.exists(starting_folder + "/" + today):
    os.makedirs(starting_folder + "/" + today)

destination_folder = starting_folder + "/" + today

#Change directory to the folder where FILES are stored
os.chdir(INSERT WORKING DIRECTORY)

for file in glob.glob("*.xlsx"):
    try:
        print(file)
        with open(file,"r") as f:
            fn = os.path.basename(f.name)
            fp = os.path.abspath(f.name)
            file_drive = drive.CreateFile({'parents':[{'kind':"drive#parentReference",'id':fid}],'title':fn})
            file_drive.SetContentFile(fp)
            file_drive.Upload()
            print("The file: " + fn + " has been uploaded to Google Drive.")
        #shutil.move(starting_folder + "/" + fn,destination_folder + "/" + fn)
        #    print("The file: " + fn + " has been moved to the folder.")
        f.close()
    except: 
        pass  

for file in glob.glob("*.xlsx"):
    try:
        fn = os.path.basename(file)
        shutil.move(starting_folder + "/" + fn,destination_folder + "/" + fn)
        #    print("The file: " + fn + " has been moved to the folder.")
    except:
        pass
print("All files have been uploaded to Google Drive, and the DRIVE has been updated.")
...