python菜鸟日记7

1. 如果直接在操作系统中进行命令行操作,那么一般使用的是操作系统所提供的接口函数,而如果想在python中也能够调用操作系统的接口函数来对文件,目录进行操作的话,可以使用os和os.path模块,这些模块可以直接调用操作系统提供的接口函数

2. >>>os.name ,name属性会反映出操作系统的一些信息,如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统,要获取详细的系统信息,可以调用uname()函数,注意uname()函数在Windows上不提供,也就是说,os模块的某些函数是跟操作系统相关的

3. 在操作系统中定义的环境变量,全部保存在os.environ这个变量中,要获取某个环境变量的值,可以调用os.environ.get(‘key‘),其中key是环境变量名,换掉你想知道的即可

4. 对于操作目录的函数,一部分放在os模块中,一部分放在os.path模块中

比如:>>> os.path.abspath(‘.‘)           #查看当前的绝对路径

‘D:\\python‘

>>> os.path.join(‘D:\\python‘, ‘testdir‘)        #在前面目录下添加一个新目录的路径,这里千万不能用连接符,因为不同操作系统上的连接符表达形式不一样

‘D:\\python\\testdir‘

>>> os.mkdir(‘D:\\python\\testdir‘)              #然后就是用mkdir函数在已有的路径下创建目录,这样才算完成了在操作系统下添加目录的过程

>>> os.rmdir(‘D:\\python\\testdir‘)              #删除该路径下的目录

>>> os.path.split(‘D:\\python\\testdir‘)         #通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:

(‘D:\\python‘, ‘testdir‘)

5. 对于操作文件的函数,也是一部分在os模块中,一部分放在os.path模块中

比如:  >>> os.path.splitext(‘D:\\python\\testdir\\abc.txt‘)                         #os.path.splitext()可以直接让你得到文件扩展名,很多时候非常方便的

(‘D:\\python\\testdir\\abc‘, ‘.txt‘)

>>>os.rename(‘test.txt‘, ‘test.py‘)                                    #将当前目录下的文件名改为后者,注意修改的是当前目录下的文件

对于4,5里面的这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们只对字符串进行操作。

6. shutil模块提供了copyfile()的函数,你还可以在shutil模块中找到很多实用函数,它们可以看做是os模块的补充

7. >>> [x for x in os.listdir(‘.‘) if os.path.isdir(x)]                                #列出当前目录下的所有目录

[‘DLLs‘, ‘Doc‘, ‘include‘, ‘Lib‘, ‘libs‘, ‘Scripts‘, ‘tcl‘, ‘Tools‘]

8.  >>> [x for x in os.listdir(‘.‘) if os.path.isfile(x) and os.path.splitext(x)[1]==‘.py‘]     #列出当前目录下的所有.py文件

[‘函数作为返回值.py‘, ‘类的实验.py‘]

9. 字典的定义有两种方式:①.d = dict(name=‘Bob‘, age=20, score=88)

②.d = {‘name‘:‘Bob‘, ‘age‘:20, ‘score‘:88}

10. 在程序运行的过程中,所有的变量都是在内存中,可以随时修改变量,但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的值存储到磁盘上,下次重新运行程序,变量又被初始化为原值,比如我们在定义了一个字典时,把其中的key所对应的values进行修改,这只是在内存中进行修改,如果不存如硬盘中,那么程序结束时,内存被回收,修改后的值也会被删除,那么我们把变量从内存中变成可存储或传输的过程称之为序列化,Python提供了pickle模块来实现序列化。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling

11. 序列化的实例:>>> import pickle

>>>d={‘a‘:1,‘b‘:2,‘c‘:3}

>>> f = open(‘D:/all study source/python 测试/ceshi.txt‘, ‘wb‘)

>>> pickle.dump(d, f)

>>> f.close()

反序列化的实例:>>> f = open(‘D:/all study source/python 测试/ceshi.txt‘, ‘rb‘)

>>> d = pickle.load(f)

>>> f.close()

>>> d

{‘b‘: 2, ‘c‘: 3, ‘a‘: 1}

12. Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据

不能成功地反序列化也没关系,如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串 可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快。

13. Python内置的json模块提供了非常完善的Python对象到JSON格式的转换

14. 操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样,对于操作系统来说,一个任务就是一个进程(Process),有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

15. 总结一下就是,多任务的实现有3种方式:多进程模式;多线程模式;多进程+多线程模式。

16. 同时执行多个任务通常各个任务之间并不是没有关联的,而是需要相互通信和协调,有时,任务1必须暂停等待任务2完成后才能继续执行,有时,任务3和任务4又不能同时执行,所以,多进程和多线程的程序的复杂度要远远高于我们前面写的单进程单线程的程序,因为复杂度高,调试困难,所以,不是迫不得已,我们也不想编写多任务。但是,有很多时候,没有多任务还真不行。想想在电脑上看电影,就必须由一个线程播放视频,另一个线程播放音频,否则,单线程实现的话就只能先把视频播放完再播放音频,或者先把音频播放完再播放视频,这显然是不行的,Python既支持多进程,又支持多线程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 15:01:12

python菜鸟日记7的相关文章

python菜鸟日记2

1.对于类之间的的子类关系是可以传递的:比如C1是C2的子类,C2是C3的子类,那么C1也是C3的子类,任何类都可以看成是自身的子类,class类里面也可以嵌套一个class类 2.在类中,要想在函数中引用类的属性(全局变量),就必须使用完整名称(类名.变量名),而对于在类体中的语句,想引用类的属性,就必须使用属性的简单名称 例如: class c(): x=55 y=x+66                   --必须使用简单名称 def b(): f=c.x**3            

python菜鸟日记4

1.在python中,0,'',{},(),[],空值,空列表,等等,都表示假值,反之都是真值在逻辑运算and,or中,返回的不是true或者false,返回的是逻辑运算符两边的其中一个值,而对于算数运算符, ==,!=,>,<,这些才返回的是true或者false 2.and,从左到右运算,当两边,都是真值时,返回最后一个真值,当两边都是假值时,就返回第一个假值,当同时存在真假值时,则返回第一个假值,其实,记法可根据逻辑运算结果记 例如: >>> 'a' and 'b' '

python菜鸟日记5

1.在python中我们可以导入模块,来调用模块里面的函数,在一个模块中,我们可以定义很多的函数和变量,但有些函数我们并不希望被别人使用,只希望在模块内部使用,那么,我们 可以通过_(下划线)前缀来实现,比如_ABC,_qiuhe,但是python并没有强制限制访问函数或变量,只是一种编程的习惯而已 2.在python中,pip是一个包管理工具,我们通过它来安装第三方软件的,一般来说,第三方库都会在Python官方的pypi.python.org网站注册,我们进入该网址,然后搜索我们要下载的模块

python菜鸟日记6

在函数调用的过程中,假设函数里面有循环嵌套的函数,那么在里面的函数遇到异常的时候,就终止函数,后面的语句将不会执行,而try后面的语句也将会中止执行,转而except. 异常其实也是一个类,是一个对象 此外,如果没有错误发生,可以在except语句块后面加一个else,当有错误发生时,会自动执行else语句 Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里 使用try-except捕获错误还有一个巨大的好处,就是可以跨越多层调用,也就是说,不需要在每

python菜鸟日记8

1. python中的多进程编程概念:由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持.multiprocessing模块就是跨平台版本的多进程模块.multiprocessing模块提供了一个Process类来代表一个进程对象. 2. python中的多线程编程具体做法:当我们引入该multiprocessing模块后,对需要进行调用的函数创建进程:b= Process(target=函数名, args=(实参,)),因为process是一个类,所以b就是一个target函数的

Python菜鸟晋级03----repr() 与str() 函数的区别

两者均是将数值转换成字符串的形式,但是有细微的区别 str()会创建一个适合人阅读的字符串. repr()会创建适合解释器阅读的字符串. >>> hello = 'hello, world\n' >>> hellos = repr(hello) >>> hellos "'hello, world\\n'" #出现反斜杠进行转意 >>> hellos=str(hello) >>> hellos 'h

Python菜鸟晋级06----特殊属性整理

Python一切皆对象(object),每个对象都可能有多个属性(attribute). #现在我们来总结下所有的系统定义属性和方法, 先来看下保留属性: >>> Class1.__doc__ # 类型帮助信息 'Class1 Doc.' >>> Class1.__name__ # 类型名称 'Class1' >>> Class1.__module__ # 类型所在模块 '__main__' >>> Class1.__bases__

Python菜鸟之路:Django 路由补充FBV和CBV

在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view . 今天补充另外一种路由关系的写法:CBV,即:class base view , 也可以看做为面向资源编程的另外一种叫法,类似tornado中的路由写法. 1. 建立路由关系urls.py from app01 import views urlpatterns = [ url(r'^home/', views.Hom

Python菜鸟晋级08----str.format()方法

用法 str.format()方法会返回一个新的字符串,在新的字符串中,原字符串的替换字段(大括号中和数字是预留的替换字段)被format方法中的参数代替. 替换字段被format方法中参数代替有一下集中形式------------------------- 按照位置 '{0},{1}'.format('kzc',18) #按照替换字段中的数字带入format方法中的参数 'kzc,18' '{},{}'.format('kzc',18) #替换字段中没有数字就按照顺序带入format方法中的参