Python:|Python: 一周笔记

Python:|Python: 一周笔记
文章图片
微信截图_20170806152336.png 主要介绍几个用到的python模块的使用方法。
python 含有丰富的内置和第三方库,企图全部掌握并精通那是不可能的。
但当你开发任务需要到的时候,你可以及时的避免重复的一些操作。
同时你可以从你使用的这些库中学习:

  • 项目的文档结构
  • 项目的代码风格
  • 组织结构
  • 代码扩展能力
  • API的设计
【Python:|Python: 一周笔记】......
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) passdef 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 = https://www.it610.com/article/[] 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

    推荐阅读