There are many methods to create and update file metadata and contents. With PyDrive, you don’t have to care about any of these different API methods. Manipulate file metadata and contents from GoogleDriveFile object and call Upload(). PyDrive will make optimal API call for you.
Here is a sample code to upload a file. gauth is an authenticated GoogleAuth object.
from pydrive.drive import GoogleDrive
drive = GoogleDrive(gauth) # Create GoogleDrive instance with authenticated GoogleAuth instance
file1 = drive.CreateFile({'title': 'Hello.txt'}) # Create GoogleDriveFile instance with title 'Hello.txt'
file1.Upload() # Upload it
print 'title: %s, id: %s' % (file1['title'], file1['id']) # title: Hello.txt, id: {{FILE_ID}}
Now, you will have a file ‘Hello.txt’ uploaded to your Google Drive. You can open it from web interface to check its content, ‘Hello World!’.
Note that CreateFile() will create GoogleDriveFile instance but not actually upload a file to Google Drive. You can initialize GoogleDriveFile object by itself. However, it is not recommended to do so in order to keep authentication consistent.
You can manipulate file metadata from GoogleDriveFile object just as you manipulate dict. Format of file metadata can be found from Google Drive API documentation: Files resource
Sample code continues from above:
file1['title'] = 'HelloWorld.txt' # Change title of the file
file1.Upload() # Update metadata
print 'title: %s' % file1['title'] # title: HelloWorld.txt
Now, the title of your file has changed to ‘HelloWorld.txt’.
You might want to get file metadata from file ID. In that case, just initialize GoogleDriveFile with file ID and access metadata from GoogleDriveFile just as you access dict.
Sample code continues from above:
file2 = drive.CreateFile({'id': file1['id']}) # Create GoogleDriveFile instance with file id of file1
print 'title: %s, mimeType: %s' % (file2['title'], file2['mimeType']) # title: HelloWorld.txt, mimeType: text/plain
Managing file content is as easy as managing file metadata. You can set file content with either SetContentFile(filename) or SetContentString(content) and call Upload() just as you did to upload or update file metadata.
Sample code continues from above:
file4 = drive.CreateFile({'title':'appdata.json', 'mimeType':'application/json'})
file4.SetContentString('{"firstname": "John", "lastname": "Smith"}')
file4.Upload() # Upload file
file4.SetContentString('{"firstname": "Claudio", "lastname": "Afshar"}')
file4.Upload() # Update content of the file
file5 = drive.CreateFile()
file5.SetContentFile('cat.png') # Read file and set it as a content of this instance.
file5.Upload() # Upload it
print 'title: %s, mimeType: %s' % (file5['title'], file5['mimeType']) # title: cat.png, mimeType: image/png
Just as you uploaded file content, you can download it using GetContentFile(filename) or GetContentString().
Sample code continues from above:
file6 = drive.CreateFile({'id': file5['id']}) # Initialize GoogleDriveFile instance with file id
file6.GetContentFile('catlove.png') # Download file as 'catlove.png'
file7 = drive.CreateFile({'id': file4['id']}) # Initialize GoogleDriveFile instance with file id
content = file7.GetContentString() # content: '{"firstname": "Claudio", "lastname": "Afshar"}'
file7.SetContentString(content.replace('lastname', 'familyname'))
file7.Upload() # Uploaded content: '{"firstname": "Claudio", "familyname": "Afshar"}'