记录零星日常 Python 使用中好用的一些技巧及操作
Python 脚本文件头
1 2 3 4 5 6 |
#!/usr/bin/env python3 # -*- coding: utf-8 -*- ' Module Name ' __author__ = 'Yu Enshui' |
Python 临时添加搜索目录(不添加环境变量)
直接修改sys.path
,添加要搜索的目录
1 2 |
import sys sys.path.append('xxx') |
Python 操作 Windows 文件
复制/移动,使用shutil
库
1 2 3 4 5 6 7 |
import shutil import os dest = r'C:\Data\upload\usage_summary_export.xlsx' if os.path.exists(dest): os.remove(dest) print(dest + '删除成功!') shutil.copy(ori,dest) |
Python 连接 FTP 服务器
FTP 是方便文件传输管理的有效工具,Python 也可以实现 FTP 的登录及操作。使用ftplib
库
1 2 3 4 5 6 7 8 9 10 11 12 |
from ftplib import FTP ftp = FTP('10.227.24.xxx') user = 'xxx' password = 'xxxxx' dirs = 'SLS/日常数据工具/' ftp.login(user=user,passwd=password) #由于FTP支持ASCII编码,Python ftplib中编码方式使用latin-1,而window默认编码方式为gbk,所以使用Python处理时需先将转换编码方式 ftp.encoding = 'gbk' ftp.cwd(dirs) print(ftp.pwd()) |
Python 批量调取 SQL 数据并存入 Excel
Excel 作为微软系 Office 必备的工具,经常需要从数据库调取数据经处理后存入 Excel 文件。
若仅是将数据存入 excel 文件中,可采用 pandas 的to_excel
方法
1 2 |
# encoding='utf-8_sig' 用来处理中文编码问题 data.to_excel(file, encoding='utf-8_sig', index=False, sheet_name='detail') |
这里着重要讲的是利用 Python 合并多个 Excel 中的 Sheet,且保留已有的 sheet。这里采用的是VBA
与Python
相结合的方法。
主要思路是:
- 在 VBA 中实现 Sheet 的合并和保存操作
- Python 脚本实现数据下载,文件处理以及调用 vba 代码
VBA 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub hebingfile() Dim MyPath, MyName, AWbName Dim Wb As Workbook, WbN As String Application.DisplayAlerts = False MyPath = ActiveWorkbook.Path Set Wb = Workbooks.Open("**/detail.xlsx") With Workbooks(1).Sheets("detail") Wb.Sheets(1).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row, 1) End With Wb.Save Wb.Close Workbooks(1).Save End Sub |
Python 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import shutil import os from datetime import datetime,timedelta import time import win32com.client from modules import get_data_from_sql path = R"**/customs/" cities = ['临沂','德州','枣庄','青岛','烟台','威海','济南','济宁','菏泽','泰安','聊城','日照','威海','淄博','东营','滨州','莱芜',] years = [2016,2017,2018] ori_file = path+'SDO海关线索数据平台.xlsm' # 文件管理 及 schedule模块 def main(): for year in years: if not os.path.exists(path+str(year)): os.makedirs(path+str(year)) for city in cities: dest_file = path+str(year)+'/SDO海关线索数据平台_%s_%s.xlsm' % (year, city) shutil.copy(ori_file, dest_file) print('%d - %s -- > xlsm 文件复制成功!! ' % (year,city)) download_detail(year,city) print('\t\t\t -- > Detail 数据下载成功!! ') use_vba(file=dest_file) print('\t\t\t -- > xlsm 导入Detail数据成功!!! ') # Excel VBA调用模块 def use_vba(file): xls = win32com.client.Dispatch("Excel.Application") xls.Workbooks.Open(file) xls.Application.Run("hebingfile") xls.Application.Quit() # sql数据库数据下载模块 def download_detail(year, city): sql = "SELECT * FROM [SDO].[dbo].[V_yes_Customs_Mar_detail] where [NianFen]= %d and [City]='%s'" % (year, city) columns = ['CompanyName', 'Quarter', 'Emp&Imp', 'Transportation', 'Lane', 'Country', 'HSCODE', 'HSNAME', 'USDVALUEOfSum', 'SHIPMENTSOfSum', 'NianFen', 'City', 'CompanyAddress', 'Telephone', 'Contact', '区划', 'remark', '渠道', '企业类别', '可能的行业', '是否DHL客户', '潜力航线'] file = r'**/detail.xlsx' data = get_data_from_sql(sql, columns) data = data.fillna('') data.to_excel(file, encoding='utf-8_sig', index=False, sheet_name='detail') if __name__ == '__main__': begin = datetime.now() print('注意:程序运行期间不可打开任何 【Excel】 文件!!!\n\t程序开始运行... ...') main() end = datetime.now() print('本次更新共计耗时 %s 秒' % str((end-begin).seconds)) |