当前位置: 首页 > news >正文

Python 远程操作文本转换excel

摘要:
      提高工作效率,完成一个SQL导出EXCEL的功能。虽然MySQL 可以直接生成excel,但是还是想通过python实现。

知识点:

      1,安装paramiko模块,参考:这里或则执行apt-get install python-paramiko,也可以在google上搜索相关文章。
      2,安装xlwt模块,参考:这里,安装sudo python setup.py install

参考文章:
     
1,http://www.codecho.com/write-excel-files-with-python-using-xlwt/ 了解xlwt的用法。
      2,http://wangwei007.blog.51cto.com/68019/1058726 了解远程执行命令和上传下载的方法。

脚本:
用法:python txt2xls.py  test

View Code
#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name:        txt2xls.py
# Purpose:     处理SQL生成Excel
# Author:      zhoujy
# Created:     2013-01-11
# update:      2013-01-11
# Copyright:   (c) Mablevi 2013
# Licence:     zjy
# Usage:       python txt2xls.py 生成的excel名字
#-------------------------------------------------------------------------------
import paramiko
import MySQLdb
import datetime
import os
import sys
import xlwt
import getpass

def get_data(conn,query): #从MySQL取数据,导成文本
    query = query + " into outfile '/home/zhoujy/outfile/out.txt'"
    cursor = conn.cursor()
    cursor.execute(query)

def sync_txt(hostname,port,username,password): #同步下载文本
    local_dir=r'/home/zhoujy/outfile/'
    remote_dir=r'/home/zhoujy/outfile/' 
    try :
        t=paramiko.Transport((hostname,port))          
        t.connect(username=username,password=password)          
        sftp=paramiko.SFTPClient.from_transport(t)  
#        files=sftp.listdir(dir_path)          
        files=sftp.listdir(remote_dir)          
        for f in files:
            print ''               
            print '#########################################'                  
            print 'Beginning to download file  from %s  %s ' % (hostname,datetime.datetime.now().strftime('%H:%M:%S'))                
            print 'Downloading file:',os.path.join(remote_dir,f) 
            sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))#下载               
#            sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f)) 上传                 
            print 'Download file success %s ' % datetime.datetime.now().strftime('%H:%M:%S')        
            print '##########################################'   
        t.close()
    except Exception :  
        print "connect error!" 

def rm_txt(hostname,port,username,password): #在服务器上执行删除文本
    paramiko.util.log_to_file('paramiko.log')
    s=paramiko.SSHClient()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())          
    s.connect(hostname = hostname,port=port,username=username, password=password)          
    stdin,stdout,stderr=s.exec_command('rm /home/zhoujy/outfile/out.txt')          
    print stdout.read()       
    s.close()

def txt2xls(filename,xlsname):  #文本转换成xls
    print 'converting xls ... '
    f = open(filename)
    x = 0
    y = 0
    xls=xlwt.Workbook()
    sheet = xls.add_sheet('sheet1',cell_overwrite_ok=True)
    while True:
        line = f.readline()
        if not line:
            break
        for i in line.split('\t'):
            item=i.strip().decode('utf8')
            sheet.write(x,y,item)
#            xls.save('test.xls')
            y += 1
        x += 1
        y = 0
    f.close()
    xls.save(xlsname+'.xls')

if __name__ == '__main__':
    hostname=raw_input('Enter Host IP   : ')
    port = input('Enter Host port : ')
    username=raw_input('Enter Host User : ')
    password = getpass.getpass('Enter Host Pwd  : ')
    Mport = input('Enter MySQL port : ')
    DBName = raw_input('Enter MySQL DBName: ')
    query = raw_input('Press SQL : ')
    conn = MySQLdb.connect(host=hostname,user='zjy',passwd='Knoj7tweysurvEg-',charset='utf8',db=DBName,port=Mport)
    get_data(conn,query)
    sync_txt(hostname,port,username,password)
    rm_txt(hostname,port,username,password)
    txt2xls('out.txt',sys.argv[1])
    raw_input('按回车结束')

 里面需要注意的是目录的问题,目录要是不存在或则没有权限,则脚本会报错;还有一点是输入中需要都在一行,不能多行,如长的sql不能分行执行。
如果只是需要把文本转换成xls,或则是在服务器上执行命令只需把脚本里面的函数取出来单独创建一个脚本就可以用了。

效果:

生成一个test的EXCEL文件。图上有个问题,在脚本后面的test.xls是不需要.xls后缀的,否则会出现2个。图就不改了。

总结:


相关文章:

  • wp7 给TextBox设置圆角边框
  • 昨天使用 [wget] 把 [vbird鸟哥] 的整个博客网站数据下了下来
  • jQuery中$.fn的用法示例介绍
  • 详解dbms_stats.gather_fixed_objects_stats
  • 【转】Objective-C消息机制的原理
  • ASP.NET MVC URL Routing 学习
  • Unsupported repository,resources names are not uri
  • POJ-3034 Whac-a-Mole 动态规划
  • Android客户端采用Http 协议Post方式请求与服务端进行数据交互
  • 约定一种格式,通过约定的格式来实现一些动作,以达到作者的目的。--程序...
  • Oracle创建索引必知——献给数据库开发者
  • 友友系统:让云计算更加贴近用户
  • 同时展多个物料BOM List
  • RHEL6入门系列之十四,用户和组的基本知识
  • easyui-datagrid 报错:TypeError: col is null
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Hexo+码云+git快速搭建免费的静态Blog
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • spring security oauth2 password授权模式
  • text-decoration与color属性
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 坑!为什么View.startAnimation不起作用?
  • 前言-如何学习区块链
  • 浅谈web中前端模板引擎的使用
  • 通信类
  • 微信小程序填坑清单
  • 与 ConTeXt MkIV 官方文档的接驳
  • 智能合约Solidity教程-事件和日志(一)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (02)Hive SQL编译成MapReduce任务的过程
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net framework profiles /.net framework 配置
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET单元测试
  • .net反混淆脱壳工具de4dot的使用
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • []error LNK2001: unresolved external symbol _m
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Assignment] C++1
  • [CTO札记]盛大文学公司名称对联
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream