How to read all the files of OneDrive and copy it with Python(如何读取 OneDrive 的所有文件并用 Python 进行复制)

本文介绍了如何读取 OneDrive 的所有文件并用 Python 进行复制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将我的整个 OneDrive 同步到 AWS S3.为此,我想读取 OneDrive 中的所有文件和文件夹(以便我可以将它们写入 AWS S3).如何获取 OneDrive 文件夹中所有文件和文件的列表?我打算以数据框的形式读取所有文件,然后写入AWS S3.

I am trying to sync my whole OneDrive to AWS S3. For this purpose, I want to read all the files and folders in OneDrive (so that I can write them in AWS S3). How do I either get a list of all the files and files in the folders for OneDrive? I plan to read all files in the form of a data frame and then write it to AWS S3.

我现在使用的代码从 OneDrive 读取我的代码中明确提到的文件.代码来自 这个答案

The code that I am using right now reads a file from OneDrive that is mentioned explicitly in my code. The code is from this answer

import sys, os, time, requests
import pandas as pd
import urllib.parse

OneDrive_FilePath = 'New Folder/Knox EARNSTSALV2020.xlsx'

OneDrive_FileURL = 'https://graph.microsoft.com/v1.0/me/drive/root:/' + OneDrive_FilePath + ':/content'
OneDrive_FileURL = urllib.parse.quote(OneDrive_FileURL, safe=':/')
print(OneDrive_FileURL)

Client_Id = 'XXXX'
Tenant_Id = 'YYYYY'
Refresh_Token_First = 'ZZZZZ'

PostStr = {'grant_type': 'refresh_token', 'client_id': Client_Id, 'refresh_token': Refresh_Token_First}

Token_Response = requests.post('https://login.microsoftonline.com/' + Tenant_Id + '/oauth2/v2.0/token', data=PostStr)

Access_Token = Token_Response.json()['access_token']
New_Refresh_Token = Token_Response.json()['refresh_token']

if Access_Token is None or New_Refresh_Token is None:
    print('
> Failed: Access_Token NOT Retrieved')
    sys.exit()

Response = requests.get(OneDrive_FileURL, headers={'Authorization': 'Bearer ' + Access_Token})

if Response.status_code == 200:
    print('
> Response Success')

    with open('Excel File.xlsx', 'wb') as File:
    File.write(Response.content)
    print('
> File Downloaded')
else:
    print('
> Failed:', Response.status_code)
    print(Response.content)
python-3.x azure python-requests 

我想阅读所有内容,而不仅仅是提到的文件.

I would like to read all the content instead of just a mentioned file.

我该怎么做?

推荐答案

根据文档,你可以列出文件夹中的文件然后下载:

According to documentation, you can list the files in a folder and then download:

response = requests.get('/drives/{drive-id}/root:/New Folder/children', headers={'Authorization': 'Bearer ' + Access_Token})

content = json.loads(response.content)
for file in content.values:
    file_response = requests.get(f'/drives/{drive-id}/root:/New Folder/{file.name}/content', headers={'Authorization': 'Bearer ' + Access_Token})
    with open(file.name, 'wb') as dest_file:
        dest_file.write(file_response.content)

这篇关于如何读取 OneDrive 的所有文件并用 Python 进行复制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!