首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python中的sharepoint读取文件

如何使用Python中的sharepoint读取文件
EN

Stack Overflow用户
提问于 2021-12-29 23:16:28
回答 1查看 1.6K关注 0票数 0

当涉及到使用python使用REST时,我是一个绝对的初学者。我们已经收到了一个共享点URL,在“文档”部分的这些文件夹中有多个文件夹和多个文件。我得到了一个'app_id‘和一个’秘密_令牌‘。

我正在尝试访问.csv文件并将它们作为数据读取并执行操作。在我下载了.csv并在本地完成操作之后,操作代码已经准备好了,但是我需要在如何使用python连接共享点方面提供帮助,这样我就不必再下载这么重的文件了。

我知道在堆栈溢出的情况下已经有了多个查询,但是没有一个能帮助我到达我想要的地方。

我做了以下工作,我不知道下一步该做什么:

代码语言:javascript
运行
复制
import json
from office365.runtime.auth.user_credential import UserCredential
from office365.sharepoint.client_context import ClientContext
from office365.runtime.http.request_options import RequestOptions

site_url = "https://<company-name>.sharepoint.com"
ctx = ClientContext(site_url).with_credentials(UserCredential("{app_id}", "{secret_token}"))

以上对于site_url,我应该使用整个网址还是直到####.com还好?

到目前为止,这就是我所拥有的,接下来我想从各自的文件夹中读取文件,并将它们转换成一个数据文件?这些文件将始终采用.csv格式

文件夹的示例层次结构如下:

文件->文件夹A,文件夹B

文件夹A-> a1.csv,a2.csv

文件夹B-> b1.csv,b2.csv

我应该能够移动到任何我想要的文件夹,并根据我的要求读取文件。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 02:13:46

这适用于我,使用Sharepoint应用程序标识与关联的客户端Id和客户端秘密。

首先,演示验证和读取特定文件,然后从文件夹中获取文件列表并读取第一个文件。

代码语言:javascript
运行
复制
import pandas as pd
import json
import io

from office365.sharepoint.client_context import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File

#Authentication (shown for a 'modern teams site', but I think should work for a company.sharepoint.com site:
site="https://<myteams.companyname.com>/sites/<site name>/<sub-site name>"
#Read credentials from a json configuration file:
spo_conf = json.load(open(r"conf\spo.conf", "r")) 

client_credentials = ClientCredential(spo_conf["RMAppID"]["clientId"],spo_conf["RMAppID"]["clientSecret"])
ctx = ClientContext(site).with_credentials(client_credentials)


#Read a specific CSV file into a dataframe:
folder_relative_url = "/sites/<site name>/<sub site>/<Library Name>/<Folder Name>"
filename = "MyFileName.csv"
response = File.open_binary(ctx, "/".join([folder_relative_url, filename]))
df = pd.read_csv(io.BytesIO(response.content))


#Get a list of file objects from a folder and read one into a DataFrame:

def getFolderContents(relativeUrl):
    contents = []
    library = ctx.web.get_list(relativeUrl)
    all_items = library.items.filter("FSObjType eq 0").expand(["File"]).get().execute_query()
    for item in all_items:  # type: ListItem
        cur_file = item.file
        contents.append(cur_file)
    return contents

fldrContents = getFolderContents('/sites/<site name>/<sub site>/<Library Name>')
response2 = File.open_binary(ctx, fldrContents[0].serverRelativeUrl)
df2 = pd.read_csv(io.BytesIO(response2.content))

一些参考资料:

相关SO线程

Office365库github站点

获取文档库文件夹中的内容列表

对意见采取后续行动的补充说明:

站点路径不包括站点主页的完整url (以.aspx结尾)--它只是以站点的名称(或者子站点,如果与您的情况相关)结束。

您不需要使用配置文件来存储Sharepoint应用程序标识的身份验证凭据--您可以将spo_conf"RMAppID“替换为Sharepoint生成的客户端Id的值,并对客户端秘密进行类似的操作。但这是一个简单的示例,说明了JSON文件的文本是什么样子的:

代码语言:javascript
运行
复制
{
    "MyAppName":{
        "clientId": "my-client-id",
        "clientSecret": "my-client-secret",
        "title":"name_for_application"
    }
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70525984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档