如何将列表数据从 SharePoint Online 下载到 csv(最好)或 json 文件?
How to download list data from SharePoint Online to a csv (preferably) or json file?
我已使用 Python 访问 SharePoint Online 中的列表,并希望将列表数据保存到文件(csv 或 json)以对其进行转换并对一些元数据进行排序以进行迁移
我可以完全访问我正在连接的 Sharepoint 站点(客户端 ID、密码..)。
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.sharepoint.client_context import ClientContext
我已经设置了我的设置:
app_settings = {
'url': 'https://company.sharepoint.com/sites/abc',
'client_id': 'id',
'client_secret': 'secret'
}
连接到站点:
context_auth = AuthenticationContext(url=app_settings['url'])
context_auth.acquire_token_for_app(client_id=app_settings['client_id'],
client_secret=app_settings['client_secret'])
ctx = ClientContext(app_settings['url'], context_auth)
获取列表并检查标题:
lists = ctx.web.lists
ctx.load(lists)
ctx.execute_query()
for lista in lists:
print(lista.properties["Title"]) # this gives me the titles of each list and it works.
lists
是一个 ListCollection Object
从前面的代码中,我看到我想要获得标题为:“分析 A”的列表:
a1 = lists.get_by_title("Analysis A")
ctx.load(a1)
ctx.execute_query() # a1 is a List item - non-iterable
然后我得到那个列表中的数据:
a1w = a1.get_items()
ctx.load(a1w)
ctx.execute_query() # a1w is a ListItemCollection - iterable
想法 1:df 到 json/csv
df1 = pd.DataFrame(a1w) #doens't work)
想法 2:
关注此 link:
我在执行 json.loads
命令时出错:
JSONDecodeError: Extra data: line 1 column 5 (char 4)
备选方案:
我试过 Shareplum,但无法连接,就像我在 office365 上一样-python-rest。我的猜测是它没有带有客户端 ID 和客户端密码的授权选项(据我所知)
你会怎么做?还是我遗漏了什么?
想法 1
如果没有错误跟踪,很难判断哪里出了问题。但我怀疑这可能与您作为参数传递的格式错误的数据有关。请参阅文档中的 here 以准确了解预期内容。
也请考虑使用相关的堆栈错误跟踪来更新您的问题。
想法 2
JSONDecodeError: Extra data: line 1 column 5 (char 4)
此错误仅表示 Json
字符串不是有效格式。您可以使用 this 服务验证 JSON 字符串。这通常会告诉您错误点,然后您可以使用它来手动修复问题。
如果正在解析的对象是 python 对象,也可能导致此错误。您可以通过 jsonifying
每行
来避免这种情况
data_list= []
for line in open('file_name.json', 'r'):
data_list.append(json.loads(line))
这避免了存储中间 python 对象。如果没有任何效果,另请参阅此 related issue。
示例测试演示供您参考。
context_auth = AuthenticationContext(url=app_settings['url'])
context_auth.acquire_token_for_app(client_id=app_settings['client_id'],
client_secret=app_settings['client_secret'])
ctx = ClientContext(app_settings['url'], context_auth)
list = ctx.web.lists.get_by_title("ListA")
items = list.get_items()
ctx.load(items)
ctx.execute_query()
dataList = []
for item in items:
dataList.append({"Title":item.properties["Title"],"Created":item.properties["Created"]})
print("Item title: {0}".format(item.properties["Title"]))
pandas.read_json(json.dumps(dataList)).to_csv("output.csv", index = None,header=True)
我已使用 Python 访问 SharePoint Online 中的列表,并希望将列表数据保存到文件(csv 或 json)以对其进行转换并对一些元数据进行排序以进行迁移
我可以完全访问我正在连接的 Sharepoint 站点(客户端 ID、密码..)。
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.sharepoint.client_context import ClientContext
我已经设置了我的设置:
app_settings = {
'url': 'https://company.sharepoint.com/sites/abc',
'client_id': 'id',
'client_secret': 'secret'
}
连接到站点:
context_auth = AuthenticationContext(url=app_settings['url'])
context_auth.acquire_token_for_app(client_id=app_settings['client_id'],
client_secret=app_settings['client_secret'])
ctx = ClientContext(app_settings['url'], context_auth)
获取列表并检查标题:
lists = ctx.web.lists
ctx.load(lists)
ctx.execute_query()
for lista in lists:
print(lista.properties["Title"]) # this gives me the titles of each list and it works.
lists
是一个 ListCollection Object
从前面的代码中,我看到我想要获得标题为:“分析 A”的列表:
a1 = lists.get_by_title("Analysis A")
ctx.load(a1)
ctx.execute_query() # a1 is a List item - non-iterable
然后我得到那个列表中的数据:
a1w = a1.get_items()
ctx.load(a1w)
ctx.execute_query() # a1w is a ListItemCollection - iterable
想法 1:df 到 json/csv
df1 = pd.DataFrame(a1w) #doens't work)
想法 2:
关注此 link:
我在执行 json.loads
命令时出错:
JSONDecodeError: Extra data: line 1 column 5 (char 4)
备选方案:
我试过 Shareplum,但无法连接,就像我在 office365 上一样-python-rest。我的猜测是它没有带有客户端 ID 和客户端密码的授权选项(据我所知)
你会怎么做?还是我遗漏了什么?
想法 1
如果没有错误跟踪,很难判断哪里出了问题。但我怀疑这可能与您作为参数传递的格式错误的数据有关。请参阅文档中的 here 以准确了解预期内容。
也请考虑使用相关的堆栈错误跟踪来更新您的问题。
想法 2
JSONDecodeError: Extra data: line 1 column 5 (char 4)
此错误仅表示 Json
字符串不是有效格式。您可以使用 this 服务验证 JSON 字符串。这通常会告诉您错误点,然后您可以使用它来手动修复问题。
如果正在解析的对象是 python 对象,也可能导致此错误。您可以通过 jsonifying
每行
data_list= []
for line in open('file_name.json', 'r'):
data_list.append(json.loads(line))
这避免了存储中间 python 对象。如果没有任何效果,另请参阅此 related issue。
示例测试演示供您参考。
context_auth = AuthenticationContext(url=app_settings['url'])
context_auth.acquire_token_for_app(client_id=app_settings['client_id'],
client_secret=app_settings['client_secret'])
ctx = ClientContext(app_settings['url'], context_auth)
list = ctx.web.lists.get_by_title("ListA")
items = list.get_items()
ctx.load(items)
ctx.execute_query()
dataList = []
for item in items:
dataList.append({"Title":item.properties["Title"],"Created":item.properties["Created"]})
print("Item title: {0}".format(item.properties["Title"]))
pandas.read_json(json.dumps(dataList)).to_csv("output.csv", index = None,header=True)