zoukankan      html  css  js  c++  java
  • Python3学习(3)-高级篇


    • 文件读写
      • 源文件test.txt
      • line1
        line2
        line3
      • 读取文件内容
      • 1 f = open('./test.txt','r')#只读模式打开test.txt文件
        2 print(f.read())#读取文件的所有内容
        3 f.close()#关闭文件
      • 读取文件内容(安全读取try--finally)
      • 1 try:#添加try异常捕获
        2     f = open('./test.txt','r')#只读模式打开test.txt文件
        3     print(f.read())#读取文件的所有内容
        4 finally:
        5     if f:    
        6         f.close()#关闭文件
      • 使用with简化读取代码
      • 1 with open('./test.txt','r') as f:
        2     print(f.read())
        3     
      • 以上所有的执行结果均为
      • ➜  Python  python3 readTxt.py
        line1
        line2
        line3
      • 读取方法详解
        • read():读取文件的所有内容。针对小文件
        • read(size):按指定大小来读取文件的内容。size字节大小。针对大文件
        • readlines():按行来读取文件的所有内容,返回为list格式。针对配制文件
      • 读取模式
        • 'r':读文件
        • 'rb':二进制读文件
        • 'w':写文件
        • 'wb':二进制写文件
    • StringIO、BytesIO
      • StringIO:字符串IO
        1.  先从io中引入StringIO
        2. 创建一个StringIO对象
        3. 写字符串到StringIO对象f中
        4. 获取字符串内容f.getvalue()
        • >>> from io import StringIO
          >>> f  = StringIO()
          >>> f.write('hello')
          5
          >>> f.write(' ')
          1
          >>> f.write('world!')
          6
          >>> print(f.getvalue())
          hello world!
      • BytesIO
        1.  从io中引入BytesIO
        2. 创建一个BytesIO对象
        3. 写字节对象
        4. 获取写入的字节内容内容
        • >>> from io import BytesIO
          >>> f = BytesIO()
          >>> f.write('我是中文'.encode('utf-8'))
          12
          >>> print(f.getvalue())
          b'xe6x88x91xe6x98xafxe4xb8xadxe6x96x87'
    • 多进程
      • fork()
        • fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。
        • 子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。
        •  1 import os
           2 
           3 print('Process (%s) starting...' % os.getpid())
           4 
           5 pid = os.fork()
           6 
           7 if pid == 0 :
           8     print('I am child process (%s) and my parent is %s' %(os.getpid(),os.getppid()))
           9 else:
          10     print('I (%s) just created a child process (%s)' %(os.getpid(),pid))
        • ➜  Python  python3 ThreadDemo.py
          Process (711) starting...
          I (711) just created a child process (712)
          I am child process (712) and my parent is 711
      • multiprocessing-Process
        •  1 from multiprocessing import Process
           2 import os
           3 
           4 #子进程代码
           5 def run_proc(name):
           6     print('Run child process %s (%s).'%(name,os.getpid()))
           7 
           8 
           9 if __name__ == '__main__':
          10     print('Parent process %s.' % os.getpid())
          11     p = Process(target=run_proc,args = ('test',))
          12     print('Child process will start..')
          13     #启动子进程
          14     p.start()
          15     #等待子进程结束后再继续往下运行
          16     p.join()
          17     print('Child process end.')
        • ➜  Python  python3 MultiProcessins.py
          Parent process 718.
          Child process will start..
          Run child process test (719).
          Child process end.
      • Pool线程池
        •  1 from multiprocessing import Pool
           2 import os,time,random
           3 
           4 #子进程代码
           5 def long_time_task(name):
           6     print('Run task %s (%s).' %(name,os.getpid()))
           7     start = time.time()
           8     time.sleep(random.random()*3)
           9     end = time.time()
          10     print('Task %s runs %.2f seconds.' %(name,(end-start)))
          11 
          12 
          13 if __name__ == '__main__':
          14     print('Parent process %s.'%os.getpid())
          15     #创建线程池
          16     p = Pool(4)
          17     for i in range(5):
          18         p.apply_async(long_time_task,args=(i,))
          19     print('Waiting for all subprocesses done..')
          20     p.close()
          21     p.join()
          22     print('All subprocesses done.')
        • ➜  Python  python3 Pool.py
          Parent process 730.
          Waiting for all subprocesses done..
          Run task 0 (731).
          Run task 1 (732).
          Run task 2 (733).
          Run task 3 (734).
          Task 2 runs 0.18 seconds.
          Run task 4 (733).
          Task 3 runs 0.83 seconds.
          Task 0 runs 1.18 seconds.
          Task 4 runs 2.46 seconds.
          Task 1 runs 2.66 seconds.
          All subprocesses done.
      • 子进程
        • 调用外部进程(系统进程):nslookup
        • 使用子进程
        • 1 import subprocess
          2 
          3 print('$ nslookup www.cnblogs.com')
          4 #调用外部
          5 r = subprocess.call(['nslookup','www.cnblogs.com'])
          6 print('Exit code:',r)
          ➜  Python  python3 SubProcess.py
          $ nslookup www.cnblogs.com
          Server:		10.1.1.5
          Address:	10.1.1.5#53
          
          Non-authoritative answer:
          Name:	www.cnblogs.com
          Address: 42.121.252.58
          
          Exit code: 0
        • 直接使用nslookup查看结果
        • ➜  ~  nslookup www.cnblogs.com
          Server:		10.1.1.5
          Address:	10.1.1.5#53
          
          Non-authoritative answer:
          Name:	www.cnblogs.com
          Address: 42.121.252.58
      • 多进程数据通信
        • 一个向Queue中写数据,另一外读数据
        •  1 from multiprocessing import Process,Queue
           2 import os,time,random
           3 
           4 #写数据
           5 def write(q):
           6     print('Process to write:%s'%os.getpid())
           7     for value in ['A','B','C']:
           8         print('Put %s to queue.'%value)
           9         q.put(value)
          10         time.sleep(random.random())
          11 
          12 #读数据
          13 def read(q):
          14     print('Process to read:%s'%os.getpid())
          15     while True:
          16         value = q.get(True)
          17         print('Get %s from queue.'%value)
          18 
          19 
          20 
          21 if __name__ == '__main__':
          22     q = Queue()
          23     pw = Process(target = write,args=(q,))
          24     pr = Process(target = read,args=(q,))
          25     pw.start()
          26     pr.start()
          27     pw.join()
          28     pr.terminate()
        • ➜  Python  python3 ProcessConn.py
          Process to write:803
          Put A to queue.
          Process to read:804
          Get A from queue.
          Put B to queue.
          Get B from queue.
          Put C to queue.
          Get C from queue.
      • 选择
        • Unix/Linux下可使用fork()
        • 跨平台使用multiprocessing
        • 多进程数据通信Queue、Pipes
    • 多线程
      • 进程是由若干线程组成的,一个进程至少有一个线程。
        •  1 import time,threading
           2 
           3 #线程代码
           4 def loop():
           5     print('thread %s is running..'%threading.current_thread().name)
           6     n = 0
           7     while n < 5:
           8         n = n + 1
           9         print('thread %s >>> %s' %(threading.current_thread().name,n))
          10         time.sleep(1)
          11     print('thread %s ended.'%threading.current_thread().name)
          12 
          13 print('thread %s is running.'%threading.current_thread().name)
          14 t = threading.Thread(target = loop,name = 'LoopThread')
          15 t.start()
          16 t.join()
          17 print('thread %s ended.'%threading.current_thread().name)
        • ➜  Python  python3 Thread.py
          thread MainThread is running.
          thread LoopThread is running..
          thread LoopThread >>> 1
          thread LoopThread >>> 2
          thread LoopThread >>> 3
          thread LoopThread >>> 4
          thread LoopThread >>> 5
          thread LoopThread ended.
          thread MainThread ended.
  • 相关阅读:
    st-load视频性能测试
    gitlab-ci集成SonarQube代码质量检查
    退役记
    洛谷 P5195 【[USACO05DEC]Knights of Ni S】
    洛谷 P4742 【[Wind Festival]Running In The Sky】
    洛谷 SP13105 【MUTDNA
    洛谷 P3174 【[HAOI2009]毛毛虫】
    洛谷 P1542 【包裹快递】
    Python函数的返回值
    ubuntu18.04修改国内apt源
  • 原文地址:https://www.cnblogs.com/s380774061/p/4693066.html
Copyright © 2011-2022 走看看