前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python: 一周笔记

Python: 一周笔记

作者头像
谢伟
发布2018-06-06 12:04:30
5770
发布2018-06-06 12:04:30
举报
文章被收录于专栏:GopherCoderGopherCoder

微信截图_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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. os
  • 2. sys
  • 3. subprocess
  • 4. paramiko
  • 5. SQLalchemy
  • 6. tempfile
  • 7. tarfile
  • 1. 登入远程服务器
  • 2. 将远程数据进行打包操作
  • 3. 将打包的data.tar.gz 文件下载至指定目录下
  • 4. 解压下载的data.tar.gz 文件到指定目录下
  • 5. 读取解压的文件:info.list, learn.list
  • 6. restful api 访问获取的数据: flask
  • 7. 执行curl 命令读取结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档