将本地数据文件加载到Colaboratory

46

我想知道是否有可能将本地数据文件(例如储存在我的谷歌云端硬盘上的.xlsx或.csv文件)加载到Colaboratory中?


截至2020年1月4日,驱动器已被“备份和同步”所取代。 - qqqqq
9个回答

44

起初我对于加载本地文件的示例有一些困惑,因为没有地方指定文件路径。你只需要复制并粘贴说明文档,就可以搞清楚了。但是为了明确起见:

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])))

将向您展示访问您刚刚上传的内容的密钥。

额外澄清:词典uploaded将具有所选文件名的键 - 因此,例如,如果您选择一个名为my_test.txt的文件,则可以使用uploaded['my_test.txt']访问该文件。


1
@elphz 如果文件是一张图片会发生什么? - Luis Ramon Ramirez Rodriguez
2
但是之后如何使用Python加载文件呢?我找不到任何一个例子。 - Ivan Bilan
我遇到了和ivan_billan一样的问题。上传没有问题,但之后就没有任何实际的示例说明如何访问已上传的文件。 - Zachary Nagler
文件可以通过 uploaded 访问,它是一个 Python 字典。例如,如果您选择了一个名为 'test.txt' 的文件,则 uploaded['test.txt'] 将给您 Python 对象。您可以使用 type 查看您已上传的字符串。只需打印 uploaded.keys() 就可以显示所有文件名。 - elz
1
@LuisRamonRamirezRodriguez - 我刚刚测试了一下png文件,看起来它仍然作为字节字符串上传。 - elz

18

首先,执行此代码块将创建一个内联的“选择文件”按钮。

from google.colab import files
uploaded = files.upload()

选择文件后,uploaded 将是一个键(文件名)和值(编码文件对象)的字典。要为 Pandas 等图书馆解码文件,请尝试:

选择好文件后,uploaded 就是一个字典,其中包含了每个文件的名称作为键以及编码后的文件对象作为对应的值。如果需要将这些文件解码并使用如 Pandas 等图书馆进行分析,可以尝试以下方法:

import pandas as pd
import io
df = pd.read_csv(io.StringIO(uploaded['filename.csv'].decode('utf-8')))

接下来您的数据框 df 应该已经准备好使用了。


我刚刚运行了导入和“files.upload()”代码行,但它一直在运行。它实际上是做什么的?它会上传我谷歌云盘中的每个文件吗? - kawingkelvin
如果我没记错的话,它应该会在你的笔记本上弹出一个文件选择窗口。从那里,你可以点击想要的文件。如果它没有加载出来,可能是你的浏览器中有些东西阻止了弹出窗口。@kawingkelvin - Zachary Nagler
我发现了问题所在以及它应该如何工作,在从Safari切换到Chrome后(FF也不行)。看起来Google Colab对于除Chrome之外的其他浏览器并不友好。 - kawingkelvin
它不起作用了,我得到了这个错误:KeyError:'/path/to/my_file.csv' - Belkacem Thiziri

17

是的,所有这些场景都得到支持。

要访问本地和Drive文件的配方,请查看I/O示例笔记本

要访问xls文件,您需要将文件上传到Google Sheets。然后,您可以在同一个I/O示例笔记本中使用gspread配方。

最近增加的一种上传本地文件的方法是使用右侧抽屉中的“文件”选项卡。

输入图像描述

从那里,您可以使用“上传”按钮上传本地文件。

输入图像描述

(您也可以通过在文件树中右键单击它们来下载文件。)


由于某些原因,即使您在面板中删除文件,它也不会得到更新。因此,最好使用ls命令了解当前情况。 - Vikranth
有没有办法让“文件”选项卡带有特定的csv文件?也就是说,如果我与某人共享一个Collaboratory项目,一旦它完全加载完成,他们是否可以拥有与我相同的csv文件(无需每次手动上传)? - monkey intern

10

将本地数据文件加载到Colab:

方法1:Google Drive 方法

  1. 将数据文件从系统内存上传到Google Drive。
  2. 在Colab中挂载Google Drive

    from google.colab import drive drive.mount('/content/gdrive')

  3. 然后-> path = "/gdrive/My Drive/filename"

现在您可以在Google Colab中访问Google Drive文件。

方法2:直接加载

from google.colab import files
def getLocalFiles():
    _files = files.upload()
    if len(_files) >0:
       for k,v in _files.items():
         open(k,'wb').write(v)
getLocalFiles()

第三种方法:使用导入文件

from google.colab import files
uploaded = files.upload()

在方法1中,您提供了连接Google Drive的指令,但没有说明如何读取文件(例如.csv文件)。您创建了一个名为“path”的变量,但接下来该怎么做呢?您如何将您的.csv文件从Google Drive上传到Google Colab笔记本中? - Matias Eiletz
1
一旦您连接到驱动器,使用pandas非常简单。pd.read_csv('/gdrive/My Drive/temp.csv') - Shaurya Uppal

5

这是一个2步骤的过程。

第1步: 首先使用以下代码在您的colab笔记本中调用文件选择器

from google.colab import files
uploaded = files.upload()

这将带您进入文件浏览器窗口

步骤2:要将文件内容加载到Pandas数据框中,请使用以下代码

import pandas as pd
import io
df = pd.read_csv(io.StringIO(uploaded['iris.csv'].decode('utf-8')))
print(df)

你应该始终使用 {} 按钮或 CTRL-K 格式化你的代码。 - Mr. T

4

以下是一种上传更多文件的替代方法,适用于那些喜欢使用其他方式上传文件的人 - 它基本上允许您通过Google Drive上传文件。

运行下面的代码(我之前在某个地方找到过这个代码,但现在找不到来源了 - 感谢撰写此代码的人!):

!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}

点击第一个链接,会提示您登录Google;之后会出现另一个链接,询问是否允许访问您的Google Drive。

然后运行以下命令,将创建一个名为“drive”的目录,并将其连接到您的Google Drive:

!mkdir -p drive
!google-drive-ocamlfuse drive

如果现在执行!ls命令,你会看到一个名为drive的目录,如果执行!ls drive命令,你可以查看你的Google Drive中所有的内容。
例如,如果我将名为abc.txt的文件保存在名为ColabNotebooks的文件夹中,我现在可以通过路径drive/ColabNotebooks/abc.txt访问它。

3
对于缺失的源代码——看起来像是这段代码:https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d#c890 - Kirk Kittell

4
为了将数据从您的系统传输到Colab,请尝试以下操作:
from google.colab import files
uploaded = files.upload()

选择您要上传的文件,然后按回车键即可完成上传。 例如,我已经上传了一张图片,并使用以下代码显示它:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg')
img_cvt = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

plt.imshow(img_cvt)
plt.show()

1

假设您的Google驱动器上有一个名为Colab的文件夹,并且该文件夹中有一个名为csv的文件。 要加载此文件

import pandas as pd
titanic = pd.read_csv(“drive/Colab/Titanic.csv”)
titanic.head(5)

在此之前,您可能需要运行以下命令:

首先运行这些代码以安装必要的库并执行授权。

!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}

当你运行上面的代码时,你应该看到像这样的结果: enter image description here 点击链接,复制验证码并将其粘贴到文本框中。
授权过程完成后,
挂载你的Google Drive:
!mkdir -p drive
!google-drive-ocamlfuse drive

1
你可以使用此URL在Google Colab中上传文件:
https://colab.research.google.com/notebooks/io.ipynb#scrollTo=vz-jH8T_Uk2c

前往本地文件系统>下载文件到您的本地文件系统,然后运行代码。之后,浏览器按钮会出现,供您从计算机上传文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接