Python에서 Google 공동 작업 및 Google 드라이브 파일 상호 작용 (3)
16354 단어 파이썬colaboratoryGoogleDriveAPI
4.query의 실행에 의한 id의 취득
아래 준비
설명의 편의를 위해 Google 드라이브 폴더 Colab Notebooks 아래
from_colab, to_colab를 만들고 to_colab 아래에 gdrive.ipynb를 복사했습니다. (gdrive_test.ipynb)
덧붙여 이 후 파일명이나 폴더명으로 검색을 하므로, 같은 이름의 폴더나 파일이 있는 경우는, 다른 이름의 폴더나 파일을 작성해 주세요.
아래 스크립트를 작성하여 쿼리를 사용할 수 있습니다.
(링크 대상 스크립트에 약간의 수정을 추가하고 있습니다.)
함수의 파라미터인 query에 디폴트로 이미지 파일을 검색하는 쿼리("mimeType='image/jpeg'")가 들어 있으므로,
gquery(service)를 실행하면 Google Drive의 이미지 파일이 출력됩니다.
또한 링크 대상에 다른 쿼리의 패턴에 대해서도 기재되어 있으므로 확인하시기 바랍니다.
htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / d 리 ゔ / v3 / u b / 음 rch 파라 rs
gquery
def gquery(service,query="mimeType='image/jpeg'"):
page_token = None
gquery=[]
cnt=0
while True:
response = service.files().list(q=query,spaces='drive',fields='nextPageToken, \
files(id, name)',pageToken=page_token).execute()
for file in response.get('files', []):
# Process change
print ('Found file: %s (%s)' % (file.get('name'), file.get('id')))
gquery.append([cnt,file.get('name'), file.get('id')])
cnt=cnt+1
page_token = response.get('nextPageToken', None)
if page_token is None:
break
return gquery
gdrive_test.ipynb의 id를 얻고 싶으므로 아래 코드를 사용하여
파일의 id를 가져옵니다. id1[2]가 다운로드하는 파일 'gdrive_test.ipynb', id2[2]가 업로드할 폴더 'from_colab'을 검색하는 쿼리입니다.
print_id1
id1=gquery(service,"name='gdrive_test.ipynb'")[0]
print(id1)
print("id1 is following:")
print(id1[2])
print_id2
id2=gquery(service,"name='from_colab'")[0]
print(id2)
print("id2 is following:")
print(id2[2])
5.Goole Drive에서 파일 다운로드, 업로드
Google Drive에서 파일을 다운로드할 대상으로 폴더 test를 만듭니다.
mkdir
! mkdir test
dir
! dir
아래 코드로 다운로드를 실행합니다.
gdownload
import io
from apiclient.http import MediaIoBaseDownload
def gdownload(service,id,path='./'):
fname=service.files().get(fileId=id).execute()["name"]
request = service.files().get_media(fileId=id)
fh = io.FileIO(path+fname,'wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print ("Download %d%%." % int(status.progress() * 100))
다운로드
gdownload(service,id1[2],'./test/')
아래 명령으로 다운로드되었는지 확인합니다.
dir/test
! dir ./test
이 파일을 Google Drive의 from_colab 폴더로 업로드하고,
파일을 Google 드라이브에 업로드한 파일을 검토하여 다운로드 및 업로드가 성공했는지 확인합니다.
gupload
import os
from apiclient.http import MediaFileUpload
#file upload
def gupload(service,filepath,id=[]):
file_metadata = {'name': os.path.basename(filepath),'parents':[id]}
media_body = MediaFileUpload(filepath,chunksize=1024*1024, resumable=True)
file = service.files().create(body=file_metadata,media_body=media_body).execute()
print('done')
업로드
gupload(service,'./test/gdrive_test.ipynb',id2[2])
6.GitHub를 이용한 방법
마지막으로 이전 코드를 gutil.py로 GitHub에 업로드했습니다.
git clone을 사용하여 지금까지의 코드를 다음과 같이 실행할 수 있습니다.
git_clone
! git clone https://github.com/hrnckmr/gutil
import
from gutil import gutil
file_upload_dialog
import google.colab.files as ggl
fname=ggl.upload()
print(fname)
print_name
fname = [k for k in fname.keys()][0]
print(fname)
change_the_json_name
import os
os.rename(fname,'client_secret.json')
서비스
service = gutil.service()
query1
id1=gutil.gquery(service,"name='gdrive_test.ipynb'")[0]
print(id1)
print("id1 is following:")
print(id1[2])
query2
id2=gutil.gquery(service,"name='from_colab'")[0]
print(id2)
print("id2 is following:")
print(id2[2])
mkdir
! mkdir test
다운로드
gutil.gdownload(service,id1[2],'./test/')
업로드
gutil.gupload(service,'./test/gdrive_test.ipynb',id2[2])
Reference
이 문제에 관하여(Python에서 Google 공동 작업 및 Google 드라이브 파일 상호 작용 (3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hrnckmr/items/2e075ee642a74af66f55텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)