python 笔记02 - google sheet应用

2019-04-09  本文已影响0人  dkStart

背景说明

因为项目中需要用到google sheet进行协同开发,我们客户端开发人员从goole sheet上面复制需要用到的数据,然后再手动黏贴到工程文件中,因为工程文件有多个,而且每次版本迭代都需要进行相同的操作,很浪费人力。最近学了下python,就想着怎么能够使用脚本去解决问题,努力了一番,所以就有了这篇简单的分享文章。

思路

想要实现脚本自动化,我们就需要能自动完成两步:1. 自动从google sheet上去获取目标数据 2. 获取到目标数据后,自动写入目标文件。

1. 从google sheet上获取目标数据

google sheet本质上也是一个网站,所以一开始我想着是不是可以才去爬虫的方式进行处理,然而看了下网站源码,简直一脸蒙蔽,要从这上面直接爬取目标数据,对于还没有python入门的我来说,难度有点大,所以果断放弃了。然后就在google上搜索,人海茫茫,总是有志同道合的人在,终于发现原来google sheet早已经开放了接口,供我们去调用。相关链接:google sheet 指南。看了下指南,我开始动手了~

step1

配置python运行环境,安装python包管理工具pip,并安装脚本所需要的库,安装库的命令如下:

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

step 2

因为要使用到google sheet的api,所以我们需要一个google账号来申请权限,并生成相应的配置文件,相关操作在上文的指南链接上面都有进行说明:

image.png

打开上文的链接,然后点击蓝色的“ENABLE THE GOOGLE SHEETS API” 按钮,会首先要求你登陆自己的google账号,登陆完成后,下载configuration.json到脚本工程目录中。

step 3

进行了前期的准备工作,我们就可以开始直接拍代码了~

  1. 验证权限,代码如下所示
def check_auth():
    creds = None
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)

    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token: 
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPE)
            creds = flow.run_local_server()
            

            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)

    return creds
  1. 创建sheet对象读取数据
    service = build('sheets', 'v4', credentials=creds)
    
    setting = Settings()
    spreadsheets_id = setting.SAMPLE_SPREADSHEET_ID
    content_range = setting.SAMPLE_RANGE_NAME

    sheet = service.spreadsheets()
    result = sheet.values().get(spreadsheetId=spreadsheets_id, range=content_range).execute()
    values = result.get('values',[])

其中需要特别说明下两个参数:

一个是spreadsheetId,这个是google sheet网址上的一个ID,网址的结构类似这样子:https://docs.google.com/spreadsheets/d/spreadsheetId/edit?ts=#gid=,我们可以直接从网址上去获取到这个spreadsheetId

另外一个参数range,它的结构类似这样子表名!B2:G4,它是用来获取数据的详细位置,第一个部分代表你要读取数据的表, B2:G4,代表B2 到 G4这个矩形中包含的数据:

B2 B3 B4
.. .. ..
G2 G3 G4

2. 写数据到目标文件

读取到我们自己想要的数据后,就可以直接写入到目标文件中了:

    with open(file_path, 'a', encoding="utf-8") as file_object:
            file_object.write(string)

Done!

上一篇下一篇

猜你喜欢

热点阅读