Python: 一周笔记

Python: 一周笔记_第1张图片
微信截图_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

你可能感兴趣的:(Python: 一周笔记)