Python3学习(3)-高级篇 – One|Piece

 

 


  • 文件读写
    • 源文件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.

本文链接:Python3学习(3)-高级篇,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量