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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容