2015-06-08 91 views
2

我在Google Apps脚本中编写了一个简短功能,可以制作存储在Google云端硬盘中的特定文件的副本。它的目的是这个文件是一个模板,每当我想为工作创建一个新文档时,我都会复制这个模板,然后改变文档的标题。我写,使文件的副本,并将其存储在我想要的特定文件夹中的代码非常简单:如何通过Python制作Google云端硬盘中的文件副本?

function copyFile() { 
    var file = DriveApp.getFileById("############################################"); 
    var folder = DriveApp.getFolderById("############################"); 
    var filename = "Copy of Template"; 
    file.makeCopy(filename, folder); 
} 

此功能需要一个特定的文件,根据ID和基于ID的特定文件夹并将复制权限“模板副本”放入该文件夹中。

我一直在寻找,我似乎无法找到这个。有没有办法做同样的事情,但用Python代替?或者,至少有一种方法让Python以某种方式调用该函数来运行此函数?我需要在Python中完成此任务,因为我正在编写一个脚本,每当我开始一个新的工作项目时,它就会同时执行许多功能,例如从Google Drive中的模板创建新文档以及其他与无关的事情Google云端硬盘,因此无法在Google Apps脚本中完成。

+0

我敢肯定,这个链接会有所帮助,但我是新来的Python编程,所以我不完全明白是怎么回事就在这里:HTTPS:/ /developers.google.com/drive/v2/reference/files/copy –

回答

1

有迹象表明,给出部分答案的网页周围的几个教程。以下是你需要做的一步一步的指导。

  1. 打开命令提示符,然后键入(不带引号),“PIP安装PyDrive”
  2. 一步一个按照这里的指示 - https://developers.google.com/drive/v3/web/quickstart/python设立一个帐户
  3. 当完成后,点击下载JSON并会下载一个文件。请确保将其重命名为client_secrets.json,而不是像Quick Start所说的那样将其重命名为client_secret.json。
  4. 接下来,请确保将该文件放在与python脚本相同的目录中。如果您从控制台运行脚本,那么该目录可能是您的用户名目录。
  5. 我假设你已经知道你正在放置这个文件的文件夹ID和你正在复制的文件ID。如果你不知道它,有关于如何使用python查找它的教程,或者你可以在Docs中打开它,它将在文件的URL中。基本上输入文件夹的ID和文件的ID,当你运行这个脚本时,它会复制所选择的文件并将它放在选定的文件夹中。
  6. 有一点需要注意的是,在运行时,浏览器窗口会打开并询问权限,只需点击接受,脚本就会完成。
  7. 为了达到此目的,您可能必须启用API部分中的Google Drive API。

的Python脚本:

## Create a new Document in Google Drive 
from pydrive.auth import GoogleAuth 
from pydrive.drive import GoogleDrive 
gauth = GoogleAuth() 
gauth.LocalWebserverAuth() 
drive = GoogleDrive(gauth) 
folder = "########" 
title = "Copy of my other file" 
file = "############" 
drive.auth.service.files().copy(fileId=file, 
          body={"parents": [{"kind": "drive#fileLink", 
           "id": folder}], 'title': title}).execute() 
+0

你的代码工作得很好。但每次我运行它,它会打开我的浏览器,需要我点击我的谷歌帐户。有没有办法以某种方式保存身份验证,所以它不需要每次都这样做? – jason

+0

我试过寻找那个,但我一直无法。这是您需要经过的一个额外步骤。做这件事可能有不同的方式,但这是我找到的最好的方式 –

1

https://developers.google.com/drive/v2/reference/files/copy

from apiclient import errors 
# ... 

def copy_file(service, origin_file_id, copy_title): 
    """Copy an existing file. 

    Args: 
    service: Drive API service instance. 
    origin_file_id: ID of the origin file to copy. 
    copy_title: Title of the copy. 

    Returns: 
    The copied file if successful, None otherwise. 
    """ 
    copied_file = {'title': copy_title} 
    try: 
    return service.files().copy(
     fileId=origin_file_id, body=copied_file).execute() 
    except errors.HttpError, error: 
    print 'An error occurred: %s' % error 
    return None 
+0

在该函数的参数中,第一个是服务。那究竟是什么? (并且请说一下超过“服务:驱动器API服务实例”。 –

+0

看看驱动api的链接文档。它解释了关于从python使用的所有需求。 –

+0

您需要了解如何阅读文档。在我引用的页面中,有一个指向https://developers.google.com/drive/web/quickstart/quickstart-python的链接,它显示了服务对象是如何实例化的。 – pinoyyid

相关问题