D05——C语言基础学PYTHON

Posted m1racle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D05——C语言基础学PYTHON相关的知识,希望对你有一定的参考价值。

C语言基础学习PYTHON——基础学习D05

 

20180815内容纲要:

    1 模块

    2 包

    3 import的本质

    4 内置模块详解

      (1)time&datetime

      (2)datetime

      (3)random

      (4)os

      (5)sys

      (6)json&pickle

      (7)shelve

      (8)xml

      (9)shutil

      (10)PyYaml

      (11)configpaser

      (12)hashlib

      (13)re

    5 练习:开发一个简单的python计算器(挑战性很强)

      

1 模块

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

>>>导入方法:

1 import module_name            调用module_name.xxx
2 from module_name import *    直接调用即可(导入优化)
3 from module_name import func_module_name as func    
4 form . improt module_name     从当前目录下导入module_name            
导入方法

>>>模块分类

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

自定义模块和开源模块的使用参考      http://www.cnblogs.com/wupeiqi/articles/4963027.html 

2 包

包:用来从逻辑上组织模块,本质就是一个目录,(必须带有一个__init__.py文件),
那么在导入包之后改如何调用包下面的.py文件呢?

1 #Author:ZhangKanghui
2 print("我最美")
3 from . import foo
__init__.py
1 #Author:ZhangKanghui
2 def foo():
3     print("我喜欢你")
foo.py
1 #Author:ZhangKanghui
2 import package
3 
4 package.foo.foo()
调用(必须与包在同级目录下)

 

3 import的本质

import的本质(路径搜索和搜索路径):
  >>>导入模块的本质就是把python文件解释一遍
  >>>导入包的本质就是执行包下的__inint__.py文件
在导入的过程中,要确保存储路径在同级目录下。如果不在那怎么解决呢?

 1 #Author:ZhangKanghui
 2 
 3 import package#直接运行
 4 
 5 import sys
 6 print(sys.path)         #获取当前文件的存储位置
 7 
 8 import os
 9 print(os.path.abspath(__file__))       #获取当前文件的存储路径
10 print(os.path.dirname(os.path.abspath(__file__)))
11 
12 #添加路径:
13 sys.path.append()       #追加到sys.path的最后,如果想放到前面怎么办
14 sys.path.insert()
15 
16 #os、sys模块下面有详解
访问目录

 

4 内置模块详解

(1)time

首先,在python中有这么几种表示时间的方法:

  (1)时间戳

  (2)元组(struct_time)共有九个元素:年,月,日,小时,分钟,秒,一周的第几天,一年的第几天,时区

  (3)格式化的时间字符串

1 >>> import time
2 >>> time.time()
3 1534000340.4254425        #这是从1970年开始计算至今的秒数。
4 #这是命令行操作
5     
时间戳time.time()
1 >>> time.localtime()
2 time.struct_time(tm_year=2018, tm_mon=8, tm_mday=11, tm_hour=23, tm_min=17, tm_sec=19, tm_wday=5, tm_yday=223, tm_isdst=0)
元组 localtime()
1 x =time.localtime()
2 >>> x
3 time.struct_time(tm_year=2018, tm_mon=8, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=43, tm_wday=6, tm_yday=224, tm_isdst=0)
4 >>> time.strftime("%Y-%m-%d %H:%m:%S",x)
5 \'2018-08-12 00:08:43\'
格式化的时间字符串time.strftime()

科普:

>>>UTC(Coordinated Universal Time,世界协调时)即格林威治天文时间,世界标准时间。在中国为UTC+8,
>>>DST(Daylight Saving Time)即夏令时

在补充一点格式:

>>>comomly used format code:

 1 %Y Year with century as a decimal number.
 2 %m Month as a decimal number [01,12].
 3 %d Day of the month as a decimal number [01,31].
 4 %H Hour (24-hour clock) as a decimal number [00,23].
 5 %M Minute as a decimal number [00,59].
 6 %S Second as a decimal number [00,61].
 7 %z Time zone offset from UTC.
 8 %a Locale\'s abbreviated weekday name.
 9 %A Locale\'s full weekday name.
10 %b Locale\'s abbreviated month name.
11 %B Locale\'s full month name.
12 %c Locale\'s appropriate date and time representation.
13 %I Hour (12-hour clock) as a decimal number [01,12].
14 %p Locale\'s equivalent of either AM or PM.
commmonly used format code

 

a  time.localtime()  将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

b  time.gmtime()     将一个时间戳转换为UTC时区(0时区)的struct_time。

 

>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=15, tm_hour=10, tm_min=3, tm_sec=22, tm_wday=2, tm_yday=227, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=15, tm_hour=2, tm_min=3, tm_sec=30, tm_wday=2, tm_yday=227, tm_isdst=0)
#这也验证了中国时区是UTC+8
二者有什么区别呢?

 

c  time.mktime()  将一个struct_time转化为时间戳 

1 >>> x =time.localtime()
2 >>> x
3 time.struct_time(tm_year=2018, tm_mon=8, tm_mday=15, tm_hour=10, tm_min=7, tm_sec=30, tm_wday=2, tm_yday=227, tm_isdst=0)
4 >>> time.mktime(x)
5 1534298850.0
time.mktime()

d time.strftime(format[,t])    

1 >>>import time
2 >>> x =time.localtime()
3 >>> x
4 time.struct_time(tm_year=2018, tm_mon=8, tm_mday=15, tm_hour=10, tm_min=13, tm_sec=47, tm_wday=2, tm_yday=227, tm_isdst=0)
5 >>> time.strftime("%Y-%m-%d %H:%m:%S",x)
6 \'2018-08-15 10:08:47\'
time.strftime()

e  time.strptime([格式化时间, format])   把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

1 >>>import time
2 >>>time.strptime(\'2011-05-05 16:37:06\', \'%Y-%m-%d %X\')
3 time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)
time.strptime([格式化时间,format])

f  asctime([t])        把一个表示时间的元组或者struct_time表示为这种形式:\'Sun Jun 20 23:21:05 1993\'。如果没有参数,将会将time.localtime()作为参数传入。

g  ctime([seconds])       把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。

1 >>> time.asctime()
2 \'Sun Aug 12 23:27:28 2018\'
3 >>> time.ctime()
4 \'Sun Aug 12 23:52:40 2018\'
5 #不要忘记导入time模块哟
一起来看看

接下来上图~

 

(2)datetime

a  datetime.datetime.now()    

1 >>> import datetime
2 >>> datetime.datetime.now()
3 datetime.datetime(2018, 8, 12, 23, 54, 0, 324086)
datetime.datetime.now()

b  datetime.date.fromtimestamp(time.time())  时间戳直接转成日期格式

1 >>> datetime.date.fromtimestamp(time.time())
2 datetime.date(2018, 8, 12)
时间戳
1 >>> datetime.datetime.now() + datetime.timedelta(3)
2 datetime.datetime(2018, 8, 15, 23, 55, 31, 676392)
当前时间+3天
1 >>> datetime.datetime.now() + datetime.timedelta(-3)
2 datetime.datetime(2018, 8, 9, 23, 55, 57, 20937)
当前时间-3天
1 >>> datetime.datetime.now() + datetime.timedelta(hours=3)
2 datetime.datetime(2018, 8, 13, 2, 56, 25, 388509)
当前时间+3小时
1 >>> datetime.datetime.now() + datetime.timedelta(minutes=30)
2 datetime.datetime(2018, 8, 13, 0, 26, 53, 300279)
当前时间+30分

(3)random

 1 #random.random()    生成一个0-1的随机浮点数
 2 >>> random.random()
 3 0.6813665412962242
 4 #那么能不能指定范围呢?
 5 #random.uniform(a,b)   
 6 >>> random.uniform(2,5)
 7 3.7103054399886606 
 8 #random.randint(a,b)    用于生成一个指定范围内的整数,包括a,b
 9 >>> random.randint(1,3)
10 3
11 >>> random.randint(1,3)
12 3
13 >>> random.randint(1,3)
14 1
15 #random.randrange(start,stop,step)  从指定范围获得一个随机数,但不包括stop
16 >>> random.randrange(1,3)
17 2
18 >>> random.randrange(1,3)
19 1
20 #random.choice("序列")            从序列中获取一个随机元素
21 >>> random.choice(\'hello\')
22 \'e\'
23 >>> random.choice(\'hello\')
24 \'o\'
25 >>> random.choice(\'hello\')
26 \'o\'
27 >>> random.choice(\'hello\')
28 \'o\'
29 >>> random.choice(\'hello\')
30 \'e\'
31 #random.sample("序列",k)     从序列中获取k个随机元素,必须指定k
32 >>> random.sample(\'hello\',2)
33 [\'l\', \'h\']
34 >>> random.sample(\'hello\',2)
35 [\'h\', \'o\']
36 >>> random.sample(\'hello\',2)
37 [\'h\', \'o\']
38 random.shuffle()                    洗牌
39 >>> l =[1,2,3,4,5,6]
40 >>> import random
41 >>> random.shuffle(l)
42 >>> l
43 [4, 6, 3, 2, 1, 5]
random模块

(2)os模块

os模块是与操作系统交互的一个接口

a  os.getcwd()       获取当前工作目录
b  os.chdir()      改变工作目录

1 os.getcwd()
2 \'C:\\\\Users\\\\miraacle\'
3 >>> os.chdir(\'C:\\\\Users\')
4 >>> os.getcwd()
5 \'C:\\\\Users\'
6 >>> os.chdir(r"C:\\Users\\miraacle")     #对比上一条chdir命令有什么区别/
7 >>> os.getcwd()
8 \'C:\\\\Users\\\\miraacle\'
如何操作

c  os.curdir()       返回当前目录

d  os.pardir()        返回当前目录的上一级目录

1 >>> os.curdir
2 \'.\'
3 >>> os.pardir
4 \'..\'
看操作

d  os.makedirs(r"C:\\a\\b\\c\\d")     生成多层递归目录
e  os.removesdirs(r"C:\\a\\b\\c\\d")     若目录为空,则删除,并递归到上一级目录,若也为空则删除,以此类推。
f  os.mkdir()             生成单级目录
g  os.rmdir()             删除单级目录
h  os.listdir()

os.listdir(\'.\')
1 >>> os.listdir(\'.\')
2 [\'.android\', \'.astropy\', \'.conda\', \'.ipython\', \'.matplotlib\', \'.oracle_jre_usage\', \'.Origin\', \'.PyCharm2017.1\', \'.QtWebEngineProcess\',\'3D Objects\', \'Anaconda3\', \'AppData\', \'Application Data\', \'Contacts\', \'Cookies\', \'Desktop\', \'Documents\', \'Downloads\', \'Evernote\', \'Favorites\', \'IntelGraphicsProfiles\', \'Links\', \'Local Settings\', \'LocalStorage\', \'MicrosoftEdgeBackups\', \'Music\', \'My Documents\', \'NetHood\', \'NTUSER.DAT\', \'ntuser.dat.LOG1\', \'ntuser.dat.LOG2\', \'NTUSER.DAT{2fe3e105-6421-11e8-b183-74e6e23ee3d1}.TM.blf\', \'NTUSER.DAT{2fe3e105-6421-11e8-b18374e6e23ee3d1}.TMContainer00000000000000000001.regtrans-ms\', \'NTUSER.DAT{2fe3e105-6421-11e8-b183-74e6e23ee3d1}.TMContainer00000000000000000002.regtrans-ms\', \'ntuser.ini\', \'OneDrive\', \'OneDrive.old\', \'Pictures\', \'PrintHood\', \'PyCharm 2017.1.2\', \'PycharmProjects\',\'Recent\', \'Saved Games\', \'Searches\', \'SendTo\', \'Templates\', \'Videos\', \'WebpageIcons.db\', \'「开始」菜单\', \'微博图片\', \'新建文件夹\']
一堆东西
os.list(\'..\')
1 >>> os.listdir(\'..\')
2 [\'Administrator\', \'All Users\', \'Default\', \'Default User\', \'Default.migrated\', \'desktop.ini\', \'miraacle\', \'Public\']
这就清楚多了

i  os.remove()             删除一个文件
j  os.rename(\'oldname\',\'newname\')

k  os.stat(\'path\')             详细信息属性

1 >>> os.stat(\'微博图片\')
2 os.stat_result(st_mode=16895, st_ino=5910974511128476, st_dev=43069414, st_nlink=1, st_uid=0, st_gid=0, st_size=0, 
3 st_atime=1481191549, st_mtime=1481191549, st_ctime=1462148410)
详细属性

l  os.sep               输出操作系统特定的路径分隔符

m  os.linesep            输出当前平台使用的行终止符  dd       

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

o  os.name             输出字符串当前使用的平台

>>> os.sep
\'\\\\\'
>>> os.linesep
\'\\r\\n\'
>>> os.pathsep
\';\'
>>> os.name
\'nt\'
操作集锦

p  os.environ             获取系统环境变量

 1 >>> os.environ
 2 environ({\'ACTEL_FOR_ALTIUM_OVERRIDE\': \' \', \'ALLUSERSPROFILE\': \'C:\\\\ProgramData\', \'ALTERA_FOR_ALTIUM_OVERRIDE\': \' \', \'ALTIUMPATH\': \'C:\\\\Program Files (x86)\\\\Altium2004 SP2\\\\System\', \'APPDATA\': \'C:\\\\Users\\\\miraacle\\\\AppData\\\\Roaming\', 
 3 \'CM2015DIR\': \'C:\\\\Program Files (x86)\\\\Common Files\\\\Autodesk Shared\\\\Materials\\\\\', \'COMMONPROGRAMFILES\': 
 4 \'C:\\\\Program Files (x86)\\\\Common Files\', \'COMMONPROGRAMFILES(X86)\': \'C:\\\\Program Files (x86)\\\\Common Files\', 
 5 \'COMMONPROGRAMW6432\': \'C:\\\\Program Files\\\\Common Files\', \'COMPUTERNAME\': 以上是关于D05——C语言基础学PYTHON的主要内容,如果未能解决你的问题,请参考以下文章

新手学Python需要用啥书

学python用啥编译器啊,哪位大佬推荐一下

d05用用定属来自定义

学python要多久

Python面向对象学习之八,装饰器

C语言代码片段