我有一个需要访问 .csv 数据文件的 Jupyter 笔记本。我打算让我组中的其他人可以访问这些,我希望它也可以直接为他们工作,而无需更改目录,或手动导入数据,甚至“在驱动器中保存快捷方式”。
目前这两个文件(.ipynb 和 .csv)都在我驱动器上的同一个文件夹中,但是当我共享该文件夹时,其他人无法访问数据文件(
pwd
设置为 /content
,即使安装了驱动器,我也无法访问“与我共享的文件夹”。
是否有允许直接使用 .csv 文件的解决方法?理想情况下,我只有一个单元格可以将 csv 从驱动器复制到内容文件夹,但我不知道如何访问它:
!cp $where_is_the_folder? data.csv /content
其他人不需要做任何事情来运行笔记本是非常重要的。
我也尝试了建议使用 PyDrive 和 auth 在这里但它似乎不起作用。
目前这是完整的代码,但显然它只适用于我的驱动器,不适用于我与之共享的其他人:
import pandas as pd
from google.colab import drive
drive.mount('/content/drive')
!cp /content/drive/MyDrive/project_folder/data.csv /content
dataFrame = pd.read_csv('/content/data.csv')
注意notebook和data.csv在同一个目录下(
/content/drive/MyDrive/project_folder
)
您链接的帖子中提到了这一点,但 Google Drive 的结构与常规文件系统不同。您的主“我的云端硬盘”文件夹确实与传统文件夹一样,但没有“与我共享文件夹”这样的东西。 “与我共享”仅向您显示您有权访问的所有文件,但它们属于其各自所有者的驱动器,您无法在 Colab 中加载这些文件。从您的角度来看,这些就像“浮动文件”,您只能直接访问,而不能从文件系统访问。
我认为您无法避免必须创建快捷方式,但是使用 PyDrive 您可以为您的用户自动执行此操作,这样他们就不必手动执行。这是一个例子:
from google.colab import drive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
source_id = '<ID of your folder or file>'
#Searches first to make sure the shortcut doesn't exist already
flist = drive.ListFile({'q':f'shortcutDetails.targetId="{source_id}" and trashed=false'}).GetList()
if (not flist):
#Create shortcut if file doesn't exist
shortcut = drive.CreateFile({'mimeType':'application/vnd.google-apps.shortcut',
'shortcutDetails':{
'targetId': source_id
}
}).Upload()
else:
#Do something else
#Shortcut gets created under /content/drive/My Drive/
快捷方式默认创建在主“我的驱动器”文件夹下。它本质上用作 symlink,您可以将其视为文件夹结构的一部分。这只是一个示例,但它应该可以帮助您开始。