可以使用现成的库(Synology Wrapper),:
pip install synology-api
也可以使用api,比较麻烦点。
#!/usr/bin/env python
# coding: utf-8# In[50]:from datetime import datetime, timedelta
from shutil import copyfile
from datetime import datetime, timedelta
import time
import openpyxl
import os
import requests
import json# In[2]:server='http://10.101.1.249:5000'# In[3]:dt=datetime.now()+timedelta(days=-1)
file_ex='%02d.%02d' % (dt.month, dt.day)# In[47]:nas_dir='/生产部/1.공통╱共同/生产部每日速报汇总!!!/%d.%02d/' % (dt.year,dt.month)
local_dir='E:/12-速报/'
nas_file='生产速报-%02d.%02d.xlsx' % (dt.month, dt.day)nas_dir_u = '/工务部/生产管理共享/%d月' % dt.month
local_file_u = '工务速报%02d.%02d.xlsx' % (dt.month, dt.day)# In[5]:# 登录
def login():print('登录...')uri=server+'/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=gw01&passwd=123456&session=FileStation&format=cookie'req=requests.request('GET',uri) if req.json()['success']:return req.json()['data']['sid']else:print('登录失败')return ''# In[61]:def logout():print('注销...')uri=server+'/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=logout&session=FileStation&_sid=' + sidreq=requests.request('GET',uri) print(req.text)# In[9]:# 下载文件
def download():print('下载...')uri=server + r'/webapi/entry.cgi?api=SYNO.FileStation.Download&version=2&method=download&path={path}&mode=open&sid={sid}&&_sid={sid}'uri=uri.format(path=nas_dir+nas_file, sid=sid)headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36','Content-Type': 'application/octet-stream','Content-Disposition': 'attachment'}req=requests.request('GET',uri, headers=headers)if not req.content.startswith(b'<!DOCTYPE html>'):with open(local_dir+nas_file, 'wb') as f:f.write(req.content)else:print('文件:%s 下载失败' % nas_file)# In[45]:# 上传文件def upload():print('上传...')try:with open(os.path.join(local_dir,local_file_u), 'rb') as payload:args = {'path': nas_dir_u,'create_parents': 'true','overwrite': 'true'} files = {'file': (local_file_u, payload, 'application/octet-stream')} uri=server + r'/webapi/entry.cgi?api=SYNO.FileStation.Upload&version=2&method=upload&_sid=' + sidreq=requests.post(uri, data=args, files=files, verify=True)print(req.json())except Exception as e:print('上传%s出错:%s' % (local_file_u,e))# In[52]:# 模板文件生成
def mycopy():print('拷贝...')file_dir='E:/12-速报/'dt=datetime.now()+timedelta(days=-1)file_ex='%02d.%02d' % (dt.month, dt.day)file_name=file_dir+'工务速报'+file_ex+'.xlsx'try:copyfile(file_dir + '工务速报_template.xlsx', file_name)except IOError as e:print('不能拷贝文件:', e)exit(1)except:print("未预期的错误:", sys.exc_info())exit(1)print('拷贝成功')# 修改数据book=openpyxl.load_workbook(file_name)sheet=book['模板']sheet.title=file_excell_j='%d년 %02d 월 %02d 일' % (dt.year, dt.month, dt.day)sheet['J1']=cell_jbook.save(file_name)# In[ ]:sid=login()# In[63]:# menu
if __name__ == '__main__':menu= '''选择操作:1、生成新速报文件2、下载生产的速报3、上传工务的速报4、退出'''print(menu)cmd = input('请输入1-4,m打印菜单:')while cmd != '4':if cmd == '1':mycopy()if cmd == '2':download()if cmd == '3':upload()if cmd == 'm':print(menu)if cmd == '4':breakcmd = input('请输入1-4,m打印菜单:')logout()# In[ ]: