python学习系列--day06

一、IO

1、文件读写

    (1)、读文件

      打开文件  : f = open('/home/jamson/pythonFiles/test.txt','r') #其路径可以是绝对路径,也可以是相对路径。第二个参数是指明打开方式 或者:

      with  open('test.txt','r') as f: # 系统会自动调用f.close()关闭打开的文件

              print(f.read())

      一次性读   content = f.read() # 一次性读取所有的数据并返回一个str对象

     一次读n个字节    cont  = f.read(n)

     一次读一行     cnt = f.readline()

     一次读取所有,并按照行存储到list      contList = f.readlines()

      (2)二进制文件

         二进制文件如图片、视频等,在打开方式加上b就行

         f = open('flowers.jpg','rb')

         f.read()

       (3)f = open('test.tx','r',encoding='gbk',errors='ignore')#其编码默认为utf-8

       (4)写文件

            with open('test.txt','w') as f:#该方式会覆盖原来的所有信息

                   f.write('hello')

            with open('test.txt','a') as f:#在文档的尾部添加信息

                   f.write('Hello')

2、StringIO

     从内存中读写str

     from io import StringIO

     f = StringIO()

     f.write('Hello')

     f.write('world')

     f.getvalue() #'Hello world'

3、BytesIO

      二进制操作,二进制流,使用与StringIO类似

4、目录文件

      import os

     查看当前目录:     os.path.abspath('.')

     创建一个新的路径  path=os.path.join('/home/jamson','testdir') #返回一个字符串,该字符串为路径

     新建目录  os.mkdir(path)

     删除目录  os.rmdir(path)

     拆分路径   os.path.split(path)  #返回一个tuple   (‘/home/jamson','tesrdir')

     得到文件的后缀名  os.path.splitext(p)[1]  #os.path.splitext()函数返回一个tuple 

     文件重命名 os.rename('test.txt','text.py')

     文件删除 os.remove('text.py')

     判断是否为目录  os.path.isdir(x)   

     判断是否为文件 os.path.isfile(x)

5、序列化pickling

      将内存中的变量变成可存储或者可以传输的过程

      import pickle

      d=dict(name='jamson',age=20,score=99)

      pickle.dumps(d) #将对象d序列化成bytes

      with open('dump.txt','wb') as f:

             pickle.dump(d,f)# 将序列写入文件dump.txt

       with open('dump.txt','rb' as f:

             t = pickle.load(f)#读取写入的信息

6、JSON

      把对象变为一个json  

      import json

      json_str=json.dumps(d)

      反序列化

      json.loads(json_str)

      对象json化

      def Student(object):

           def __init__(self,name,age):

                 self.name = name

                 self.age = age

       json.dumps(s,default= lambda obj:obj.__dict__)

      一般的类用dict来存储属性

     反json化

     def  json2std(d):

           return Sudent(d['name'],d['age'])

     json.loads(d,object_hook=json2std)

二、进程与线程

1、多进程

    (1)在Unix/Linux、Mac里有一个fork()函数用来创建进程

     import os

     pid = os.fork()#创建进程

   (2)在Windows下没有fork()函数,利用python的multiprocessing模块

     from multiprocessing import Process

     p = Process(target= function_xxx,args=('xxx',))#创建一个Process对象,参数为一个函数,以及该函数的一些参数

     p.start()#启动进程

     p.join()#等待子进程接收后才执行后面的代码

  (3)进程池Pool

     当需要批量创建进程时,可以使用Pool

     from multiprocessing import Pool

     p = Pool(5)#创建Pool对象,5表示同时运行的进程数

     for i in range(10):#创建10个进程

          p.apply_async(function_xxx,args=('xxx',))

     p.close()

     p.join()#这两句的位置不能颠倒

   (4)子进程subprocess

   (5)进程之间的通讯

       在multiprocessing 里有提供Pipe、Queue等方式

2、多线程

   (1)threading.Thread 创建线程

            import threading

             t = threading.Thread(target=function_xxx,name='xxxx')#子进程将要执行的函数,以及子进程的名字

             t.start()

             t.join()

  (2)一个进程中的资源由所有的线程共享,所以易造成混乱。操作系统的P、V操作

          lock = threading.Lock()

          在需要读写共享变量的时候加上

         lock.acquire()#加锁

         try:

            ...

         finally:

              lock.release()#一定要解锁

                                

                                                                                                                                                          next

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值