专栏首页GopherCoderPython: 一周笔记

Python: 一周笔记

微信截图_20170806152336.png

主要介绍几个用到的python模块的使用方法。 python 含有丰富的内置和第三方库,企图全部掌握并精通那是不可能的。

但当你开发任务需要到的时候,你可以及时的避免重复的一些操作。

同时你可以从你使用的这些库中学习:

  • 项目的文档结构
  • 项目的代码风格
  • 组织结构
  • 代码扩展能力
  • API的设计

......

1. os

主要是完成的是对文件、文件目录等的操作。

2. sys

主要完成的是对系统参数,输入输出的操作。

3. subprocess

主要完成的是执行shell 命令,得到输入输出错误信息等。

4. paramiko

主要完成的是登入远程服务器,执行shell命令,远程文件上传、下载操作。

一般你要登入远程服务器进行操作你会怎么做:

  • ssh 登入远程服务器
  • 执行命令
  • sftp get: 下载文件
  • sftp put: 上传文件
  • scp 上传下载文件

paramiko 就是封装了这些操作,提供接口供你使用。

5. SQLalchemy

主要是ORM技术,完成对数据库的高级封装,主要属性增删改查API。

6. tempfile

主要是创建临时文件,完成读写等功能。

7. tarfile

主要是完成对文件的打包和解包操作。

好了,具体如何操作可以看看文档: 为了讲述这几个模块,我假定了这样一个任务: 前提: 服务器/root/ 目录下有一个data文件:

/root/data
├── info.list
└── learn.list

这两个文件内容是:

info.list:

{
    "age": 26,
    "university": "shanghai university",
    "major": "automation",
    "habits": ["Learning", "Reading", "Writing"],
    "slogan": "day day up"

}

learn.list:

{
   "subject one": "Programing",
   "subject two": "Jobs",
   "subject three": "New Media Operation",
   "subject four": "PPT"

}

我们最终的目的是"曲折"的完成通过:/api.example.com/information api 接口获取这两个文件的内容: 具体如下:

curl http://127.0.0.1:5000/api.example.com/information
{
  "info": {
    "resource": [
      {
        "age": 26,
        "habits": [
          "Learning",
          "Reading",
          "Writing"
        ],
        "major": "automation",
        "slogan": "day day up",
        "university": "shanghai university"
      },
      {
        "subject four": "PPT",
        "subject one": "Programing",
        "subject three": "New Media Operation",
        "subject two": "Jobs"
      }
    ]
  }
}

为了"曲折"的既完成使用到上述几个模块,又完成目的,代码中做了部门没有实际作用的工作,谢谢。

  1. 登入远程服务器:paramiko
  2. 将远程数据进行打包操作:shell tar 命令 :data.tar.gz
  3. 将远程数据进行下载到本地:sftp
  4. 解压指定下载的data.tar.gz 文件到指定目录下:extract_data/ : tarfile
  5. 读取解压的文件:info.list, learn.list : os
  6. restful api 访问获取的数据: flask

1. 登入远程服务器

使用paramiko 模块:实例化sshclient对象,和sftp对象

class RemoteOperation(object):
    def __init__(self, hostname, user, password):
        self.hostname = hostname
        self.user = user
        self.password = password
        self.ssh = paramiko.SSHClient() # 实现登录和执行shell 命令
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.transport = paramiko.Transport((self.hostname, 22))
        self.transport.connect(
            username=self.user,
            password=self.password
        )
        self.sftp = paramiko.SFTPClient.from_transport(
            self.transport
        ) # 实现服务器之间的文件上传和传输功能

    def login(self):
        try:
            self.ssh.connect(
                hostname=self.hostname,
                port=22,
                username=self.user,
                password=self.password
            )
            return "OK"
        except Exception as e:
            return str(e)
        pass

2. 将远程数据进行打包操作

sshclient 对象执行exec_command()方法

    def cmd(self, cmd):
        cmd = str(cmd)
        try:
            self.ssh.exec_command(cmd)
            return "OK"
        except Exception as e:
            return str(e)
            
cmd('tar -zxcf data.tar.gz data/)

3. 将打包的data.tar.gz 文件下载至指定目录下

    def get(self, remotepath, localpath):
        try:
            self.sftp.get(remotepath, localpath)
            self.transport.close()
            return 'OK'
        except Exception as e:
            return str(e)

    def put(self, localpath, remotepath):
        try:
            self.sftp.put(localpath, remotepath)
            self.transport.close()
            return 'OK'
        except Exception as e:
            return str(e)

# get 实现下载
# put 实现上传
# 指定目录为:E:\PythonProject\Exercise\data
path = r'E:\PythonProject\Exercise\data'
get(remotepath='/root/data.tar.gz', localpath=path + str('\data.tar.gz'))

4. 解压下载的data.tar.gz 文件到指定目录下

    def vtarfiles(self, file, path):
        t = tarfile.open(file, 'r:gz')
        t.extractall(path=path)
        pass

    def ctarfiles(self, file, path):
        t = tarfile.open(file, 'w:gz')
        list_file = os.listdir(path)
        print(list_file)
        for one in list_file:
            one = os.path.join(path, one)
            print(one)
            t.add(one, arcname=file)

# vtarfile 实现解压文件功能
# ctarfile 实现压缩文件功能
example.vtarfiles(r'E:\PythonProject\Exercise\data\data.tar.gz', path=r'E:\PythonProject\Exercise\extract_data')

example.ctarfiles(file=r'E:\PythonProject\Exercise\data\datatempfile.tar.gz',
                  path=r'E:\PythonProject\Exercise\extract_data\data')

5. 读取解压的文件:info.list, learn.list

    def get_info(self, path):
        list_path = os.listdir(path)
        data = []
        for one in list_path:
            one = os.path.join(path, one)
            data.append(self.parse_info(one))
        return {'resource': data}

    def parse_info(self, file):
        if file.endswith('list'):
            with open(file, 'r') as f:
                return eval(f.read())

6. restful api 访问获取的数据: flask

@app.route('/api.example.com/information', methods=['GET'])
def get_infos():
    json_info = example.get_info(path=r'E:\PythonProject\Exercise\extract_data\data')
    return jsonify(info=json_info)

7. 执行curl 命令读取结果

curl -i http://127.0.0.1:5000/api.example.com/information

All code for this passage

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 强化训练:第四篇

    谢伟
  • Python:一周笔记

    谢伟
  • Python 强化训练:第七篇

    谢伟
  • Python学习笔记(四) 爬取网站数据(静态,动态)

    java攻城狮
  • python3--对象之间的交互,类命名空间与对象、实例的命令空间

    现在有个游戏人与狗,人定义一个类,狗定义一个类,如何让两个类之间互相交互起来,让这个游戏变得更加有意思,代码如下

    py3study
  • 以往的Python文章总结

    笔记;因为Python不像C语言那样的强结构语言,所以我学完C就开始学Python,脑袋嗡嗡的,不过还好,它的赋值很不一般,像C语言第一条应该是先申请一个变量然...

    天钧
  • Python入门之面向对象之类继承与派生

    本章内容     一、继承     二、抽象类     三、继承的实现原理 ==========================================...

    Jetpropelledsnake21
  • python之路day5

    铺垫: 1、os模块 os模块中的system,使用os.system("dir")可直接输出结果,如果将os.system("dir")赋值给一个变量,则这个...

    py3study
  • Python25 面向对象

    你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能...

    py3study
  • python3--类的组合,初始类的继承

    圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长

    py3study

扫码关注云+社区

领取腾讯云代金券