基础知识

1. 定义

模块:用来从逻辑上组织python代码(变量,函数,类,逻辑----实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块就是test)

包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)

2. 导入方法

module_cc文件里有很多函数&变量:

import module1_name

import module1_name,module2_name

from module_cc import *   #把其他模块的东西全部导入过来执行一遍

from module_cc import m1,m2,m3

from module_alex import logger as logger_alex#若导入的模块名与当前的函数名相同,则可用as对导入的模块名重命名

3. import本质

导入模块的本质就是把python文件解释一遍;

导入包的本质就是执行该包下的__init__.py文件;

4. 模块分类

python的模块又分为以下三种:

  • 自定义模块
  • 内置标准模块(标准库)
  • 开源模块

自定义模块

1.获取当前文件的绝对路径:

#如目前路径为d:\python\new\read.py;获取当前文件的绝对路径:
>>> import os#导入os模块
>>> dir = os.path.abspath(__file__)
>>> print(dir)

2.获取当前文件的父级目录绝对路径:

#如目前路径为d:\python\new\read.py;获取new的绝对路径:
>>> import os#导入os模块
>>> dir = os.path.dirname(os.path.abspath(__file__))
>>> print(dir)

3.当前文件的父级目录的父级目录绝对路径:

#如目前路径为d:\python\new\read.py;获取python的绝对路径:
>>> import os #导入os模块
>>> dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
>>> print(dir)

4.对于模块和自己写的程序不在同一个目录下,可以把模块的路径通过sys.path.append(路径)添加到程序中。

在程序开头加上:

#如目前路径为d:\python\new\read.py;想要导入d:\python\old\read_new.py下的程序模块:
>>> import os,sys
>>> dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取python目录的绝对路径
>>> sys.path.append(dir)#讲python目录的路径添加到程序中
#-----想要快速找到该路径,则可使用insert将要添加的目录路径插入到path前面
# sys.path.insert(dir)
>>> import old from read_new #导入read_new.py文件 #在当前路径下调用read_new.py里的某个函数,如user()
>>> read_new.user()

内置模块

1. time & datetime

import time
import datetime # time模块 print(time.clock()) # 输出=>3.110193534902903e-07
print(time.process_time()) # 输出=>0.031200199999999997
# 返回当前时间戳,即1970.1.1至今的秒数
print(time.time()) # 输出=>1454239454.328046 # 当前系统时间
print(time.ctime()) # 输出=>Sun Jan 31 19:24:14 2016 # 将当前时间戳转换成字符串格式的时间
print(time.ctime(time.time())) # 输出=>Sun Jan 31 19:24:14 2016 # 将时间戳转换成struct_time格式
print(time.gmtime(time.time()))
# time.struct_time(tm_year=2016, tm_mon=1, tm_mday=31, tm_hour=11, tm_min=24, tm_sec=14, tm_wday=6, tm_yday=31, tm_isdst=0) # 将本地时间的时间戳转换成struct_time格式
print(time.localtime(time.time()))
# time.struct_time(tm_year=2016, tm_mon=1, tm_mday=31, tm_hour=19, tm_min=24, tm_sec=14, tm_wday=6, tm_yday=31, tm_isdst=0) # 与上面的相反,将struct_time格式转回成时间戳格式。
print(time.mktime(time.localtime())) # 输出=>1454239454.0 # sleep
# time.sleep(4) # 将struct_time格式转成指定的字符串格式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))) # 输出=>2016-02-01 13:53:22 # 将字符串格式转成struct_time格式
print(time.strptime("2016-02-01", "%Y-%m-%d"))
# time.struct_time(tm_year=2016, tm_mon=2, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=32, tm_isdst=-1) # datetime 模块 print(datetime.date.today()) # 输出=>2016-02-01 print(datetime.date.fromtimestamp(time.time() - 86640)) # 输出=>2016-01-31 current_time = datetime.datetime.now()
print(current_time) # 输出=>2016-02-01 14:01:02.428880 # 返回struct_time格式的时间
print(current_time.timetuple())
# time.struct_time(tm_year=2016, tm_mon=2, tm_mday=1, tm_hour=14, tm_min=1, tm_sec=41, tm_wday=0, tm_yday=32, tm_isdst=-1) # 指定替换
# datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
print(current_time.replace(2008, 8, 8)) # 输出=>2008-08-08 14:03:53.901093 # 将字符串转换成日期格式
str_to_date = datetime.datetime.strptime("2016-02-01", "%Y-%m-%d")
print(str_to_date) # 输出=>2016-02-01 00:00:00 # 比现在+10d
new_date = datetime.datetime.now() + datetime.timedelta(days=10)
print(new_date) # 输出=>2016-02-11 14:46:49.158138 # 比现在-10d
new_date = datetime.datetime.now() - datetime.timedelta(days=10)
print(new_date) # 输出=>2016-01-22 14:53:03.712109 # 比现在+10h
new_date = datetime.datetime.now() + datetime.timedelta(hours=10)
print(new_date) # 输出=>2016-02-02 00:53:03.712109 # 比现在+120s
new_date = datetime.datetime.now() + datetime.timedelta(seconds=120)
print(new_date) # 输出=>2016-02-01 14:55:03.712109

2. random

Python中的random模块用于生成随机数.

import random #导入random模块
print(random.random()) #生成一个0到1的随机浮点数 0<=n<1
print(random.randint(1,7))#random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。
# 其中参数a是下限,参数b是上限,生成的随机数n的范围: a <= n <= b
print(random.randrange(1,10,2))#random.randrange的函数原型为:random.randrange([start], stop[, step]),
# 从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(1,10,2),
# 结果相当于从[1, 3, 5, 7, 9]序列中获取一个随机数。
print(random.choice('liukuni')) #i
#random.choice从序列中获取一个随机元素。
# 其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。
# 这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。
# list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。
# 下面是使用choice的一些例子:
print(random.choice("学习Python"))#学
print(random.choice(["JGood","is","a","handsome","boy"])) #List
print(random.choice(("Tuple","List","Dict"))) #List print(random.sample([1,2,3,4,5],3)) #[1, 2, 5]
#random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。 
# 生成4位随机验证码
check_code = ""
for i in range(4):
current = random.randrange(0, 4)
if current != i:
temp = chr(random.randint(97, 122))
else:
temp = random.randint(0, 9)
check_code = "{}{}".format(check_code, temp) print(check_code) # 输出=>oovf

3. os

Python os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。

常用方法:

1. os.name #输出字符串指示正在使用的平台。如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'。

import os
print(os.name)
------打印输出------
nt 

2. os.getcwd() #函数得到当前工作目录,即当前Python脚本工作的目录路径。

import os
print(os.getcwd())
------打印输出------
E:\python\old

3. os.listdir() #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印。

import os
print(os.listdir()) ------打印输出-------
['dd.json', 'eg.txt', 'read.py', '__init__.py', '__pycache__']

4. os.chdir("dirname") #更改当前文件脚本目录,相当于shell下的cd

print(os.getcwd())
os.chdir(r'E:\python\new')
print(os.getcwd()) ----打印输出-----
E:\python\old
E:\python\new

5. os.curdir #返回当前目录(.)

6. os.pardir #返回当前目录的父级目录(..)

7. os.makedirs('dirname1\dirname2') #可生成多层递归目录

import os
os.makedirs(r"E:\A\B\C") #可看到E盘下生成了A文件夹,A文件夹里有B文件夹,B文件夹下有C文件夹

8. os.removedirs('dirnames') #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

import os
os.removedirs(r"E:\A\B\C") #可看到E盘下的A文件夹都被删除了

9. os.mkdir('dirname') #生成单级目录;相当于shell中mkdir dirname

import os
os.mkdir(r"E:\A")

10. os.rmdir('dirname') #删除单级空目录,若目录不为空则报错

import os
os.rmdir(r"E:\A")
----打印输出-----
Traceback (most recent call last):
File "E:/python/old/read.py", line 2, in <module>
os.rmdir(r"E:\A")
OSError: [WinError 145] 目录不是空的。: 'E:\\A' #删除A下文件后再次删除
import os
os.rmdir(r"E:\A")
#----可以成功删除

11. os.remove("filename") #删除一个文件

import os
os.remove(r"E:\A\1.txt")

12. os.rename("oldname","newname") #重命名文件/目录

import os
os.rename(r"E:\A",r"E:\B")

13. os.stat('path/filename') #获取指定文件/目录信息

import os
print(os.stat("E:\B")) ------打印输出-------
os.stat_result(st_mode=16895, st_ino=62205969853149254, st_dev=1526633361, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1471857944, st_mtime=1471857944, st_ctime=1471857604)

14. os.sep #输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

15. os.pathsep   #输出用于分割文件路径的字符串

16. os.system("bash command")  运行shell命令,直接显示

import os
os.system('ipconfig')

17. os.environ #获取系统环境变量

18. os.path.abspath(path)  #返回path规范化的绝对路径

import os
print(os.path.abspath('python')) ------打印输出--------
E:\python\old\python

19. os.path.split(path) #将path分割成目录和文件二元组返回

import os
print(os.path.split(r'E:\python\old\eg.txt')) -----打印输出-----
('E:\\python\\old', 'eg.txt')

20. os.path.basename(path) #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

import os
print(os.path.basename(r'E:\python\old\eg.txt')) ------打印输出-----
eg.txt

21. os.path.exists(path) #如果path存在,返回True;如果path不存在,返回False

22. os.path.isabs(path) #如果path是绝对路径则返回True

23. os.path.isfile(path) #如果path是一个存在的文件,返回True。否则返回False

24. os.path.isdir(path) #如果path是一个存在的目录,则返回True。否则返回False

25. os.path.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

import os
print(os.path.join(r'E:\python\new',r'eg.txt'))

26. os.path.getatime(path) #返回path所指向的文件或者目录的最后存取时间

import os,time
time1 = os.path.getatime(r'E:\python\new')
x = time.localtime(time1)
print(time.strftime('%Y-%m-%d %H:%M:%S',x)) -----打印时间-----
2016-08-17 19:09:32

27. os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间

import os,time
time1 = os.path.getmtime(r'E:\B')
x = time.localtime(time1)
print(time.strftime('%Y-%m-%d %H:%M:%S',x))

4. sys

sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互

1. 导入模块

import sys

2.重要函数变量

print(sys.argv) #命令行参数List,第一个元素是程序本身路径
# -----打印输出------
# ['E:/python/old/read.py'] sys.exit(status) #退出程序,正常退出时exit(0) print(sys.version) #获取Python解释程序的版本信息
#----打印输出-----
# 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 print(sys.platform) #返回操作系统平台名称 sys.stdin() #标准输入流
sys.stdout #标准输出流。
sys.stderr #标准错误流。

5. shutil

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Q1mi" """
高级的 文件、文件夹、压缩包 处理模块
""" import shutil
import os # 将文件内容(文件对象)拷贝到另一个文件中,可以指定部分拷贝
# with open("D:\qimi_WorkSpace\S12\day6\\test1.txt", "rt") as f1, open("D:\qimi_WorkSpace\S12\day6\\test2.txt", "at")as f2:
# shutil.copyfileobj(fsrc=f1, fdst=f2) # 拷贝文件
# shutil.copyfile(src="D:\qimi_WorkSpace\S12\day6\\test1.txt",dst="D:\qimi_WorkSpace\S12\day6\\test2.txt") # 仅拷贝权限。内容、组、用户均不变
# print(os.stat("D:\qimi_WorkSpace\S12\day6\\test2.txt"))
# shutil.copymode(src="D:\qimi_WorkSpace\S12\day6\\test1.txt", dst="D:\qimi_WorkSpace\S12\day6\\test2.txt")
# print(os.stat("D:\qimi_WorkSpace\S12\day6\\test2.txt")) # # 拷贝状态的信息,包括:mode bits, atime, mtime, flags
# shutil.copystat(src=,dst=)
#
# # 拷贝文件和权限
# shutil.copy(src, dst) # 拷贝文件和状态信息
# shutil.copy2(src,dst) # 递归的去拷贝文件
# shutil.ignore_patterns(*patterns)
# shutil.copytree(src, dst, symlinks=False, ignore=None) # 递归的去删除文件
# shutil.rmtree(path[, ignore_errors[, onerror]]) # 递归的去移动文件
# shutil.move(src, dst) # 创建压缩包并返回文件路径,例如:zip、tar
# shutil.make_archive(base_name, format,...) #
# base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
# 如:www =>保存至当前路径
# 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
# format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
# root_dir: 要压缩的文件夹路径(默认当前目录)
# owner: 用户,默认当前用户
# group: 组,默认当前组
# logger: 用于记录日志,通常是logging.Logger对象 # 将D:\qimi_WorkSpace\S12\day6目录下的文件打包成test.tar.gz,放置在当前目录
et = shutil.make_archive("test", 'gztar', root_dir='D:\\qimi_WorkSpace\\S12\\day6') # shutil模块对压缩包的处理是调用ZipFile和TarFile两个模块来进行的 # zipfile模块
import zipfile # 压缩
z = zipfile.ZipFile('test.zip', 'w')
z.write('a.log')
z.write('a.data')
z.close() # 解压
z = zipfile.ZipFile('test.zip', 'r')
z.extractall()
z.close() # tarfile模块
import tarfile # 压缩
tar = tarfile.open('test.tar','w')
tar.add('D:\\qimi_WorkSpace\\S12\\day6\\test1.tar', arcname='test1.tar')
tar.add('D:\\qimi_WorkSpace\\S12\\day6\\test2.tar', arcname='test2.tar')
tar.close() # 解压
tar = tarfile.open('test.tar','r')
tar.extractall() # 可设置解压地址
tar.close()

6. json & picle

见上篇文章,这里不再概述

7. shelve

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

import shelve

d = shelve.open('shelve_test') #打开一个文件 

class Test(object):
def __init__(self,n):
self.n = n t = Test(123)
t2 = Test(123334) name = ["alex","rain","test"]
d["test"] = name #持久化列表
d["t1"] = t #持久化类
d["t2"] = t2 d.close()

8. xml处理

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Q1mi" """
xml模块的练习
""" import xml.etree.ElementTree as ET # 解析xml文件
tree = ET.parse("test.xml")
# 获取根
root = tree.getroot()
print(root.tag) # 遍历xml文档
for child in root:
print(child.tag, child.attrib)
for i in child:
print(i.tag, i.text) # 只遍历year节点
for i in root.iter("year"):
print(i.tag, i.text) # 修改和删除xml文件
tree = ET.parse("test2.xml")
root = tree.getroot() 

9. yaml处理

略。。。

10. configparser

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Q1mi"
"""
configparser 练习
""" import configparser # 写一个配置文件
config = configparser.ConfigParser()
config["DEFAULT"] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9'} config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '50022' # mutates the parser
topsecret['ForwardX11'] = 'no' # same here
config['DEFAULT']['ForwardX11'] = 'yes'
with open('example.ini', 'w') as configfile:
config.write(configfile) # 读配置文件
config = configparser.ConfigParser()
print(config.sections())
a = config.read("test.cfg")
print(a)
print(config.sections())
print("bitbucket.org" in config.sections())
print(config["bitbucket.org"]["user"]) for key in config["bitbucket.org"]:
print(key, config["bitbucket.org"][key]) # 增删改查
config = configparser.ConfigParser()
config.read("test.cfg")
sec = config.sections()
print(sec) options = config.options("bitbucket.org")
print(options) item_list = config.items("bitbucket.org")
print(item_list) val = config.get("bitbucket.org", "compressionlevel")
print(val)
val = config.getint("bitbucket.org", "compressionlevel")
print(val) # 改写
config.remove_section("bitbucket.org")
config.write(open("test2.cfg", "w")) sec = config.has_section("bitbuckrt.org")
print(sec)
config.add_section("bitbucket.org")
sec = config.has_section("bitbuckrt.org")
print(sec) config.write(open("test2.cfg", "w")) config.set("bitbucket.org", 'k1', "11111")
config.write(open("test2.cfg", "w")) config.remove_option("topsecret.server.com", "port")
config.write(open("test2.cfg", "w")) 

11. hashlib

用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

import hashlib

m = hashlib.md5()
m.update(b"Hello")
m.update(b"It's me")
print(m.digest())
m.update(b"It's been a long time since last time we ...") print(m.digest()) #2进制格式hash
print(len(m.hexdigest())) #16进制格式hash
'''
def digest(self, *args, **kwargs): # real signature unknown
""" Return the digest value as a string of binary data. """
pass def hexdigest(self, *args, **kwargs): # real signature unknown
""" Return the digest value as a string of hexadecimal digits. """
pass '''
import hashlib # ######## md5 ######## hash = hashlib.md5()
hash.update('admin')
print(hash.hexdigest()) # ######## sha1 ######## hash = hashlib.sha1()
hash.update('admin')
print(hash.hexdigest()) # ######## sha256 ######## hash = hashlib.sha256()
hash.update('admin')
print(hash.hexdigest()) # ######## sha384 ######## hash = hashlib.sha384()
hash.update('admin')
print(hash.hexdigest()) # ######## sha512 ######## hash = hashlib.sha512()
hash.update('admin')
print(hash.hexdigest())

12. re正则表达式

开源模块

暂略

python学习笔记-(九)模块的更多相关文章

  1. Python学习笔记九

    Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...

  2. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  3. Python学习笔记—itertools模块

    这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...

  4. python学习笔记_week5_模块

    模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...

  5. python学习笔记(八)-模块

    大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...

  6. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  7. Python学习笔记1—模块

    模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例: ...

  8. Python学习笔记2——模块的发布

    1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...

  9. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  10. Python学习笔记14—模块

    在python中所有的模块都被加入到了sys.path中,用下面的方法可以看见模块的位置. >>> import sys >>> import pprint > ...

随机推荐

  1. navigationView 的使用和布局文件的绑定

    今天项目进行到了细化内容的部分啦- 需要美化侧滑菜单,并且填充数据.在博客上看了好久发现大家的都大同小异 而且很少有提到如何绑定内容各处求助终于在一片博客上发现了蛛丝马迹!!上大神的帖子:blog.c ...

  2. IntelliJ idea的使用

    1.快捷键 2.插件集成 附录:参考资料

  3. LINQ日常使用记录

    1.公司一位美女程序媛写的 2.技术总监提供(来自互联网) var query = from f in db.TField join fw in db.TFieldWel on f.emp_no eq ...

  4. 如何在iOS地图上高效的显示大量数据

    2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...

  5. springMVC学习--RESTful支持

    简介 RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用.RESTful(即Representational State T ...

  6. Ceph常用维护操作

    查看ceph 集群状态 1.ssh 登陆任一MON主机 2.执行 sudo ceph health detail 命令 启动.停止.重启.查看MON进程 1.登陆到MON的服务器,执行如下命令 sud ...

  7. struts2的核心和工作原理

    struts2的核心和工作原理 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于clien ...

  8. idea 新建web项目

  9. 【BZOJ 2152】聪聪可可 点分治

    对于一棵树,fdrt找到重心,然后分治每个子树. 在一棵以重心为根的树上,符合条件的链是: 1.过重心(根) 2.不过重心 对于1我们只需dfs出距离重心(根)的距离然后统计再减去有重叠的边 对于2我 ...

  10. javascript 对象实例

    创建对象: var o = new Objct(); //创建一个空对象 var o = {}; var a = new Array(); //创建一个空数组 var a = []; var d = ...