Sap*_*tam 2 python google-drive-api jupyter-notebook google-colaboratory
我正在尝试使用 Google Colab 笔记本下载并提取 Google 语音命令数据集。Tar 档案相当大,但从 ML 数据集 POV 来看,它相当小。执行下面附加的代码片段后,我可以看到存档已正确提取,并且可以看到虚拟机磁盘中的所有文件(不用说,正如预期的那样,有 100K+ 文件)。
我了解将 Colab 的虚拟机内存与 Google Drive 同步需要一些时间。但即使等待了很长一段时间(几乎一天),Google Drive 也没有正确更新。运行几行代码表明,只有 10-12 个目录已正确更新(总共 36 个),其余都是空的。这是 Google 云端硬盘同步过程中的某种错误导致的吗?或者我以不正确的方式做某事?任何帮助或建议将不胜感激。提前致谢!
我正在使用这段相当简单的代码。
import os
import tarfile
import requests
from tqdm import tqdm
from google.colab import drive
drive.mount('/gdrive', force_remount = True)
# url = "http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz"
url = "http://download.tensorflow.org/data/speech_commands_v0.02.tar.gz"
file_name = "speech.tar.gz"
dir_path = "/gdrive/My Drive/Temp/ML/Final/dataset/"
download_path = dir_path + file_name
r = requests.get(url, stream = True)
with open(download_path, 'wb') as file:
for block in r.iter_content(chunk_size = 4096):
if(block):
file.write(block)
print("[INFO] Download completed.")
def extract_tar(path, dest_dir):
os.chdir(dest_dir)
with tarfile.open(name = path) as tar:
for member in tqdm(iterable = tar.getmembers(), total = len(tar.getmembers())):
tar.extract(member = member)
extract_tar(download_path, dir_path)
print("[INFO] Extraction completed.")
!rm /gdrive/My\ Drive/Temp/ML/Final/dataset/speech.tar.gz
print("[CAUTION] File deleted!")
Run Code Online (Sandbox Code Playgroud)
我也遇到过这个问题。最后我能够解决这个问题(只需一行代码)。
我在谷歌驱动器中有一个非常大的文件(6 GB)(将文件上传到谷歌驱动器)
我尝试使用云转换器提取,但如果您的文件大小大于 1GB,则需要付费
然后我尝试使用以下方法在协作中提取它:
// mount google drive
---------------------------------
from google.colab import drive
drive.mount('gdrive', force_remount=True)
root_dir = '/content/gdrive/'
// Extract file
-----------------------
!unrar x <rar_file>
Run Code Online (Sandbox Code Playgroud)
我可以看到该文件正在被提取,但我在谷歌驱动器中找不到提取的文件。
因此,根据这里的原始问题,我也认为可能是,谷歌协作和谷歌驱动器没有同步。
但是当我仔细观察时,我发现 google-collab 正在 /content 文件夹中提取文件(无论您从哪个目录触发 unrar 命令)
所以我简单地使用了这个命令,它解决了我的问题:
!unrar x <rar_file> <dest_folder_where_we_want_to_extract>
Run Code Online (Sandbox Code Playgroud)
所以我们必须明确同步协作和驱动:
drive.flush_and_unmount()
Run Code Online (Sandbox Code Playgroud)
这可能需要几个小时,具体取决于数据是否以 GB 为单位,否则速度非常快。
(请在单独的单元格中运行此命令。不要与我们解压的单元格中运行此命令)
如上命令卸载驱动器。请重新安装您的驱动器。
from google.colab import drive
drive.mount('gdrive', force_remount=True)
root_dir = '/content/gdrive/'
Run Code Online (Sandbox Code Playgroud)