Google Colab : Google 드라이브에서 데이터를 읽는 방법은 무엇입니까?
문제는 간단합니다. gDrive에 데이터가 있습니다 (예 : /projects/my_project/my_data*
.
또한 gColab에 간단한 노트북이 있습니다.
그래서 다음과 같이하고 싶습니다.
for file in glob.glob("/projects/my_project/my_data*"):
do_something(file)
안타깝게도 모든 예제 (예 : https://colab.research.google.com/notebook#fileId=/v2/external/notebooks/io.ipynb )는 주로 필요한 모든 데이터를 노트북에로드하도록 제안합니다.
그러나 데이터가 많으면 상당히 복잡 할 수 있습니다. 이 문제를 해결할 기회가 있습니까?
도와 주셔서 감사합니다!
좋은 소식입니다. PyDrive 는 CoLab에서 최고 수준의 지원을 제공합니다! PyDrive는 Google 드라이브 Python 클라이언트 용 래퍼입니다. 다음은 + 를 사용하는 것과 유사한 폴더에서 모든 파일을 다운로드하는 방법에 대한 예입니다 .glob
*
!pip install -U -q PyDrive
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
# 1. Authenticate and create the PyDrive client.
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
# choose a local (colab) directory to store the data.
local_download_path = os.path.expanduser('~/data')
try:
os.makedirs(local_download_path)
except: pass
# 2. Auto-iterate using the query syntax
# https://developers.google.com/drive/v2/web/search-parameters
file_list = drive.ListFile(
{'q': "'1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk' in parents"}).GetList()
for f in file_list:
# 3. Create & download by id.
print('title: %s, id: %s' % (f['title'], f['id']))
fname = os.path.join(local_download_path, f['title'])
print('downloading to {}'.format(fname))
f_ = drive.CreateFile({'id': f['id']})
f_.GetContentFile(fname)
with open(fname, 'r') as f:
print(f.read())
의 인수 drive.ListFile
는 Google Drive HTTP API에서 사용하는 매개 변수와 일치하는 사전입니다 ( q
사용 사례에 맞게 매개 변수를 맞춤 설정할 수 있음).
모든 경우에 파일 / 폴더는 Google 드라이브에서 id로 인코딩됩니다 ( 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk ). 이를 위해서는 검색을 루팅하려는 폴더에 해당하는 특정 ID에 대해 Google 드라이브를 검색해야합니다.
예를 들어 "/projects/my_project/my_data"
Google 드라이브에 있는 폴더로 이동합니다 .
CoLab에 다운로드하려는 파일이 포함되어 있는지 확인하십시오. PyDrive에서 사용하기 위해 폴더의 ID를 얻으려면 url을보고 id 매개 변수를 추출하십시오. 이 경우 폴더에 해당하는 URL은 다음과 같습니다.
id는 URL의 마지막 부분 인 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk 입니다.
다음 코드 스 니펫을 실행하여 Google 드라이브 파일을 마운트 할 수 있습니다.
from google.colab import drive
drive.mount('/content/drive')
그런 다음 파일 브라우저 측면 패널에서 또는 명령 줄 유틸리티를 사용하여 드라이브 파일과 상호 작용할 수 있습니다.
훌륭한 답변에 감사드립니다! Google 드라이브에서 Colab으로 몇 개의 일회성 파일을 가져 오는 가장 빠른 방법 : 드라이브 도우미로드 및 마운트
from google.colab import drive
승인을 요청합니다.
drive.mount('/content/drive')
새 탭에서 링크를 열면 코드가 표시됩니다. 코드를 다시 복사하여 이제 Google 드라이브 확인에 액세스 할 수 있습니다.
!ls "/content/drive/My Drive"
그런 다음 필요에 따라 파일을 복사합니다.
!cp "/content/drive/My Drive/xy.py" "xy.py"
파일이 복사되었는지 확인합니다.
!ls
이전 답변의 대부분은 약간 (매우) 복잡합니다.
from google.colab import drive
drive.mount("/content/drive", force_remount=True)
나는 이것이 구글 드라이브를 CO Lab 에 마운트하는 가장 쉽고 빠른 방법이라고 생각했습니다 . mount directory location
매개 변수를 변경하여 원하는대로 변경할 수 있습니다 drive.mount
. 계정에 대한 권한을 수락 할 수있는 링크가 제공되며 생성 된 키를 복사하여 붙여 넣으면 선택한 경로에 드라이브가 마운트됩니다.
force_remount
이전에로드되었는지 여부에 관계없이 드라이브를 마운트해야하는 경우에만 사용됩니다. 강제 마운트를 원하지 않는 경우 매개 변수를 무시할 수 있습니다.
편집 : IO
colab https://colab.research.google.com/notebooks/io.ipynb 에서 작업 을 수행하는 더 많은 방법을 찾으려면 이것을 확인하십시오.
colab에 파일을 영구적으로 저장할 수 없습니다. 드라이브에서 파일을 가져올 수 있지만 파일 작업을 마칠 때마다 다시 저장할 수 있습니다.
Colab 세션에 Google 드라이브를 마운트하려면
from google.colab import drive
drive.mount('/content/gdrive')
로컬 파일 시스템 에서처럼 Google 드라이브에 간단히 쓸 수 있습니다. 이제 Google 드라이브가 파일 탭에로드됩니다. 이제 colab의 모든 파일에 액세스 할 수 있으며 파일을 읽고 쓸 수도 있습니다. 변경 사항은 드라이브에서 실시간으로 수행되며 파일에 대한 액세스 링크가있는 사람은 누구나 colab에서 변경 사항을 볼 수 있습니다.
예
with open('/content/gdrive/My Drive/filename.txt', 'w') as f:
f.write('values')
나는 게으르고 기억력이 나쁘기 때문에 암기하고 입력하기 쉬운 easycolab 을 만들기로 결정했습니다 .
import easycolab as ec
ec.mount()
먼저 설치해야합니다. !pip install easycolab
이 mount()
방법은 기본적으로 이것을 구현합니다.
from google.colab import drive
drive.mount(‘/content/drive’)
cd ‘/content/gdrive/My Drive/’
화면 왼쪽에있는 코드 스 니펫을 사용하기 만하면됩니다. 여기에 이미지 설명 입력
"VM에 Google 드라이브 마운트"를 삽입합니다.
코드를 실행하고 URL에 코드를 복사하여 붙여 넣습니다.
그런 다음! ls를 사용하여 디렉토리를 확인하십시오.
!ls /gdrive
대부분의 경우 "/ gdrive / My drive"디렉토리에서 원하는 것을 찾을 수 있습니다.
다음과 같이 수행 할 수 있습니다.
from google.colab import drive
drive.mount('/gdrive')
import glob
file_path = glob.glob("/gdrive/My Drive/***.txt")
for file in file_path:
do_something(file)
뿡뿡
나는 디렉토리와 모든 하위 디렉토리를 복사하는 것에 대해 이야기하고 있습니다.
나를 위해 다음과 같은 해결책을 찾았습니다.
def copy_directory(source_id, local_target):
try:
os.makedirs(local_target)
except:
pass
file_list = drive.ListFile(
{'q': "'{source_id}' in parents".format(source_id=source_id)}).GetList()
for f in file_list:
key in ['title', 'id', 'mimeType']]))
if f["title"].startswith("."):
continue
fname = os.path.join(local_target, f['title'])
if f['mimeType'] == 'application/vnd.google-apps.folder':
copy_directory(f['id'], fname)
else:
f_ = drive.CreateFile({'id': f['id']})
f_.GetContentFile(fname)
그럼에도 불구하고 gDrive는 너무 많은 파일을 복사하는 것을 좋아하지 않는 것 같습니다.
colab 노트북 (**. ipnb)에서 파일을 읽는 방법은 여러 가지가 있습니다.
- 런타임의 가상 머신에 Google 드라이브를 마운트합니다. 여기 & 여기
- Using google.colab.files.upload(). the easiest solution
- Using the native REST API;
- Using a wrapper around the API such as PyDrive
Method 1 and 2 worked for me, rest I wasn't able to figure out. If anyone could, as others tried in above post please write an elegant answer. thanks in advance.!
First method:
I wasn't able to mount my google drive, so I installed these libraries
# Install a Drive FUSE wrapper.
# https://github.com/astrada/google-drive-ocamlfuse
!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
Once the installation & authorization process is finished, you first mount your drive.
!mkdir -p drive
!google-drive-ocamlfuse drive
After installation I was able to mount the google drive, everything in your google drive starts from /content/drive
!ls /content/drive/ML/../../../../path_to_your_folder/
Now you can simply read the file from path_to_your_folder
folder into pandas using the above path.
import pandas as pd
df = pd.read_json('drive/ML/../../../../path_to_your_folder/file.json')
df.head(5)
/../.를 사용하지 않고받은 절대 경로를 사용한다고 가정합니다.
두 번째 방법 :
읽으려는 파일이 현재 작업 디렉토리에 있으면 편리합니다.
로컬 파일 시스템에서 파일을 업로드해야하는 경우 아래 코드를 사용할 수 있습니다. 그렇지 않으면 피하십시오.!
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
print('User uploaded file "{name}" with length {length} bytes'.format(
name=fn, length=len(uploaded[fn])))
Google 드라이브의 폴더 계층 아래에 있다고 가정합니다.
/content/drive/ML/../../../../path_to_your_folder/
그런 다음 pandas에로드하려면 아래 코드가 필요합니다.
import pandas as pd
import io
df = pd.read_json(io.StringIO(uploaded['file.json'].decode('utf-8')))
df
모든 데이터를 '.'에 다운로드하는 클래스를 작성했습니다. colab 서버의 위치
여기에서 모든 것을 가져올 수 있습니다 https://github.com/brianmanderson/Copy-Shared-Google-to-Colab
!pip install PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
import os
class download_data_from_folder(object):
def __init__(self,path):
path_id = path[path.find('id=')+3:]
self.file_list = self.get_files_in_location(path_id)
self.unwrap_data(self.file_list)
def get_files_in_location(self,folder_id):
file_list = drive.ListFile({'q': "'{}' in parents and trashed=false".format(folder_id)}).GetList()
return file_list
def unwrap_data(self,file_list,directory='.'):
for i, file in enumerate(file_list):
print(str((i + 1) / len(file_list) * 100) + '% done copying')
if file['mimeType'].find('folder') != -1:
if not os.path.exists(os.path.join(directory, file['title'])):
os.makedirs(os.path.join(directory, file['title']))
print('Copying folder ' + os.path.join(directory, file['title']))
self.unwrap_data(self.get_files_in_location(file['id']), os.path.join(directory, file['title']))
else:
if not os.path.exists(os.path.join(directory, file['title'])):
downloaded = drive.CreateFile({'id': file['id']})
downloaded.GetContentFile(os.path.join(directory, file['title']))
return None
data_path = 'shared_path_location'
download_data_from_folder(data_path)
참조 URL : https://stackoverflow.com/questions/48376580/google-colab-how-to-read-data-from-my-google-drive
'programing' 카테고리의 다른 글
사용자 지정 탐색 모음 스타일-iOS (0) | 2021.01.16 |
---|---|
Spring MVC 컨트롤러 테스트-결과 JSON 문자열 인쇄 (0) | 2021.01.16 |
Angular 5 클릭 할 때마다 맨 위로 스크롤 (0) | 2021.01.16 |
정규식 유효성 검사의 10 진수 또는 숫자 값 (0) | 2021.01.16 |
Django for 루프 템플릿에서 홀수 및 짝수 값을 얻으려면 어떻게해야합니까? (0) | 2021.01.16 |