一、导入模块的概念
#(1)针对同一个目录下:
#前提:day文件里有product模块和model是模块。run是model模块里的函数,name是model文件里的变量
import model
model.run()
print(model.name)
#在product模块导入同一个目录下的model.py文件,如果调用run函数的话,则使用‘model.run()’;如果调用name变量话,则使用‘model.name’,比如:print(model.name)
from model import run
run()
#如果在product模块导入同一个目录下model里的run函数的话,则直接使用‘run()’
from model import *
run()
#product模块从同一个目录下的model里导入所有的函数,记住:这种方法慎用,因为多个模块的话,这样使用不便于找到函数所在的模块。如果使用run函数的话,则直接使用‘run()’
from model import name
print(name)
#product模块导入同一个目录下model里的name变量,则name可以被拿来直接使用,比如:print(name)
#(2)针对不同目录下:
#前提是:项目下有day1和day两个目录下,day1下有CMS模块,模块里有hhh()函数和user_filename变量;day里有product模块
from day1 import CMS
CMS.hhh()
#或者
from day1.CMS import hhh
hhh()
#day下的product模块里导入day1下模块里的hhh函数
from day1.CMS import user_filename
print(user_filename)
#day下的product模块里导入day1下模块里user_filename变量
二、Python的环境变量
环境变量就是用来让用户在任意一个目录都可以运行使用命令(比如:python)。导入模块的时候,python首先在当前目录下去找这个模块,如果在当前目录下没有找到这个文件的话,那么就去环境变量里面找该目录。在pycharm运行,默认会把2个目录路径加入Python环境路径里,其中一个是当前目录,另外一个是当前的项目目录,然而在cmd命令运行或服务器里运行,则需要自己手动把目录加入到环境变量,否则会找不到模块。由此所以,代码里最好把当前项目目录加入到环境变量里。
记住一点:python代码运行结束,加入环境变量的路径就会自动去掉。
import sys
sys.path.insert(0,r'xxxx') #‘xxxx’是路径地址
三、random模块
import random
print(random.random()) #获取随机浮点数,默认取0-1,不能指定范围
print(random.uniform(1,34)) #获取随机浮点数,可以指定范围
print(random.randint(1,366)) #随机取整数,可以指定范围
print(random.randrange(1,366))#随机取整数,可以指定范围
print(random.choice(['x45yqty',5,7,'a']))#随机从可迭代对象里去一个元素
print(random.sample(('x45yqty',5,7,'a',89,6),3)) #随机从可迭代对象里取几个元素,返回元组
x=[1,2,3,4,5,7,8,10,'aty']
random.shuffle(x) #洗牌,打乱原list的顺序,会改变原来的list值
print(x)
四、string模块
#string模块
import string
print(string.ascii_letters)#获取所有的大小写字母,返回的是一个字符串
print(string.ascii_lowercase)#获取所有的小写字符,返回字符串
print(string.ascii_uppercase)#获取所有的大写字符,返回字符串
print(string.digits)#获取所有的数字,返回字符串
五、json模块
字典和list类型都可以通过json进行格式化。json也是一种数据类型,它里也有list和字典。
#json.loads()方法,例子如下:
import json,requests
url='http://video.tudou.com/subscribe/check?uid=UNDY1NjIwNDkwNA%3D%3D&_=1498723117672'
res=requests.get(url).text
print(type(res))
res_ll=json.loads(res)#json串转为字典
print(type(res_ll)
#json.load()方法,例子如下:
import json
fr=open('asg.json')
new_res=json.load(fr)
#把文件里的json串转换成字典,load方法是传入一个文件对象,然后load方法自动去读这个文件的内容,然后转成字典
print(new_res)
print(type(new_res))
#json.dumps()方法,例子如下:
import json
dic={
'username':'huhy',
'age':34,
'sex':'女'
}
dic_j=json.dumps(dic) #字典转成json字符串
print(dic_j)
print(type(dic_j))
#json.dump()方法,例子如下:
import json
dic={
'username':'huhy',
'age':34,
'sex':'女'
}
fw=open('zzh','w')
json.dump(dic,fw)#操作文件,把字典转成字符串,然后直接写到文件里
六、time/datetime模块
时间有三种格式:第一种是时间戳、第二种是格式化时间、第三种就是时间元组
import time,datetime
time.sleep(1)#程序休息几秒
print(time.time())#获取当前时间戳
print(time.localtime(1497950139))#获取时间元组,其中1497950139是时间戳;默认是当前时区UTC+8
print(time.localtime())#时间戳不写的话,默认获取当前时间元组
print(time.gmtime(1498732057.6223967))#获取时间元组,默认是标准时区UTC
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(1498732057.6223967)))
# #将时间元组1498732057.6223967转换成格式化时间 2017-06-29 10:27:37
print(time.strftime("%Y-%m-%d %H:%M:%S"))#时间元组不写的话,默认获取当前格式化时间
print(time.asctime())#将时间元组转换成格式化时间,括号里不写默认当前时间。比如输出:Fri Jul 14 14:36:57 2017
print(time.ctime(1498732057.6223967))#讲时间戳转换成格式化时间,括号里不写默认当前时间。比如输出:Thu Jun 29 18:27:37 2017
print(datetime.datetime.now())#将当前时间格式化输出 2017-06-29 18:35:24.570104
print(datetime.datetime.now()+datetime.timedelta(3))#3天后的时间
print(datetime.datetime.now()+datetime.timedelta(-3))#3天前的时间
七、os/sys模块
import sys
print(sys.argv)#获取命令行参数list,第一个元素是程序本身路径,后面的元素是参数
print(sys.version)#获取Python解释程序的版本信息
print(sys.path)#返回模块的搜索路径,初始化使用PYTHONPATH环境变量的值
print(sys.platform)#返回操作系统平台名称
sys.stdout.write('please:')#向屏幕输出一句话,等价于:print('please:')
val=sys.stdin.readline()[:-1]#获取输入的
sys.exit(0)#退出程序,正常退出时exit(0)
import os,time
print(os.getcwd())#获取当前工作目录,绝对路径
os.chmod('\user\bin',7)#linux环境下,给文件/目录加权限
print(os.chdir(r'D:\learning\huhy'))
#更改当前目录,到指定目录中
print(os.makedirs("OS/huhy1/hat1"))#在父目录下递归创建文件夹
print(os.removedirs("OS/file"))#递归删除空目录,若不是空目录无法删除,会报错
print(os.mkdir('huat'))#创建文件夹,若文件夹已存在则会报错
os.rmdir(r"D:\learning\huhy\sample\huat")#删除文件夹
print(os.remove(r'D:\learning\huhy\sample\huat\sss.txt'))#删除文件,若文件找不到会报错
os.rename(r'huat\test.txt',r'huat\case.txt')#重命名文件的名称
print(os.stat(r'huat\case.txt'))#获取文件信息
print(os.name)#显示当前使用的平台
print(os.sep)#当前操作系统的路径分隔符
print(os.environ)#当前系统的环境变量
print(os.pathsep)#当前系统的环境变量中每个路径的分隔符,linux是‘,’,windows是‘;’
print(os.linesep)#当前操作系统的换行符
with open('huat\case.txt','w',encoding='utf-8') as fw:
fw.write('ddddd')
fw.write(os.linesep)
fw.write('taayy')
print(os.path.abspath(__file__))#获取当前文件的绝对路径
print(__file__)#这个也会获取到当前文件的路径,但是路径里面的斜杠不符合路径格式
print(os.path.split('huat\case.txt'))#分割文件和路径名称
print(os.path.dirname(r'\usr\local\bin'))#获取父目录
print(os.path.exists(r'\usr\local\bin\a.txt'))#判断文件目录/文件是否存在,存在就返回True,否则返回False
print(os.path.join(os.path.dirname(os.path.abspath(__file__)),'huat'))#拼接成一个路径
print(os.path.join(r'D:\learning\huhy\sample','huat'))#同上,拼接路径
print(os.listdir('.'))#列出当前目录下的所有文件
print(os.listdir('..'))#列出父目录下的所有文件
print(os.path.getatime(r'D:\learning\huhy\day\login.py'))
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(os.path.getatime(r'D:\learning\huhy\day\login.py'))))
#os.path.getatime输出最近访问时间戳
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(os.path.getmtime(r'D:\learning\huhy\day\login.py'))))
#os.path.getmtime输出最近修改时间戳
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(os.path.getctime(r'D:\learning\huhy\day\login.py'))))
#os.path.getctime输出文件创建时间戳
print(os.curdir)#当前目录
print(os.pardir)#父目录
print(os.path.basename(r'\usr\local\bin\a.txt'))#获取最后一级,如果是文件显示文件名,如果是目录显示目录名
print(os.path.isabs(r'D:\sample\huat\sss.txt'))#判断是否是绝对路径,是绝对路径返回True,否则返回False
print(os.path.isfile(r'D:\learning\huhy\sample\huat\case.txt'))#判断该绝对路径是否是文件
print(os.path.isdir(r'D:\learning\huhy\sample\huat'))#判断是否是路径
七、paramiko模块
https://www.cnblogs.com/yangmv/p/5169924.html
基于ssh上传文件
import paramiko
import os
print(os.path.realpath(__file__))
t_obj = paramiko.Transport('10.0.0.22',22)
t_obj.connect(username='root',password='root')
sftp_obj = paramiko.SFTPClient.from_transport(t_obj)
sftp_obj.put('./test.py','/test.py')
t_obj.close()
使用SFTP下载文件
import paramiko
#获取SSHClient实例
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接SSH服务端
client.connect("host_ip",username="username",password="password")
#获取Transport实例
tran = client.get_transport()
#获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(tran)
remotepath='/tmp/NewNC.py'
localpath='/root/Desktop/NewNC.py'
sftp.get(remotepath, localpath)
client.close()
基于私钥上传文件 需先将公钥传给10.0.0.22
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
transport = paramiko.Transport(('10.0.0.22', 22))
transport.connect(username='root', pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/a.py','/tmp/test.py')
# 将remove_path 下载到本地 local_path
# sftp.get('remove_path', 'local_path')
transport.close()
shutil模块
拷贝文件的内容到另一个文件中,参数是文件名
shutil.copyfile('./old.file','./new2.file')
with open('new2.file','r') as nf:
print(nf.read())
拷贝文件和权限
import shutil
shutil.copy2('f1.log', 'f2.log')
递归拷贝
shutil.copytree('/home','/tmp/hbak',
ignore=shutil.ignore_patterns('*.file'))
# 递归拷贝的文件夹下的所以内容到另一个文件下,目标文
件夹应该是原来系统中不存在的文件夹
删除
shutil.rmtree('/tmp/hb')
递归去移动文件
shutil.move('/home/src.file','./shark')
序列化json
https://www.cnblogs.com/sun-haiyu/p/7087088.html
文件open
https://www.cnblogs.com/hqd2008/p/7637577.html
yaml
需要下载安装 http://pyyaml.org/wiki/PyYAML
解压
$ python3 setup.py install