2016-11-21 2 views
0

python의 googleapiclient 모듈을 통해 파일을 명시 적으로 이동할 수 있습니까? 그러나 이것이,Google-Drive-API로 파일 이동

def move_file(service, filename, init_drive_path, drive_path, copy=False): 
    """Moves a file in Google Drive from one location to another. 

    service: Drive API service instance. 
    filename (string): full name of file on drive 
    init_drive_path (string): initial file location on Drive 
    drive_path (string): the file path to move the file in on Drive 
    copy (boolean): file should be saved in both locations 

    Returns nothing. 
    """ 

은 현재 내가 수동으로 원하는 위치에 다시 업로드 한 다음 파일을 다운로드를 통해이를 실행 한 : 나는 파일 주어진 다음 함수, 원래의 경로와 대상 경로를 만들려면 큰 파일에는 실용적이지 않으며 어쨌든 해결 방법처럼 보입니다.

Here's the documentation google-drive-api에서 사용할 수있는 방법입니다. 아래


편집 참조 솔루션 :

답변

0

Found it here. 당신은 그냥 파일 및 폴더 ID를 검색 한 후 업데이트 방법을 사용해야합니다. 당신이 이전 폴더 (들)에있는 파일의 복사본을 남겨하려는 경우 remove_parents 매개 변수를 제외 할 수

file_id = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ' 
folder_id = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E' 
# Retrieve the existing parents to remove 
file = drive_service.files().get(fileId=file_id, 
           fields='parents').execute(); 
previous_parents = ",".join(file.get('parents')) 
# Move the file to the new folder 
file = drive_service.files().update(fileId=file_id, 
            addParents=folder_id, 
            removeParents=previous_parents, 
            fields='id, parents').execute() 

볼 것이다 그래서 내 원래의 기능 (내 기본 도우미 함수 _getFileId 및 _getFolderId을 포함하지 않은 참고) 예 :

def move_file(service, filename, init_drive_path, drive_path, copy=False): 
     """Moves a file in Google Drive from one location to another. 

     service: Drive API service instance. 
     'filename' (string): file path on local machine, or a bytestream 
     to use as a file. 
     'init_drive_path' (string): the file path the file was initially in on Google 
     Drive (in <folder>/<folder>/<folder> format). 
     'drive_path' (string): the file path to move the file in on Google 
     Drive (in <folder>/<folder>/<folder> format). 
     'copy' (boolean): file should be saved in both locations 

     Returns nothing. 
     """ 
    file_id = _getFileId(service, filename, init_drive_path) 
    folder_id = _getFolderId(service, drive_path) 

    if not file_id or not folder_id: 
     raise Exception('Did not find file specefied: {}/{}'.format(init_drive_path, filename)) 

    file = service.files().get(fileId=file_id, 
            fields='parents').execute() 
    previous_parents = ",".join(file.get('parents')) 
    if copy: 
     previous_parents = '' 

    file = service.files().update(fileId=file_id, 
             addParents=folder_id, 
             removeParents=previous_parents, 
             fields='id, parents').execute()