python第三方库类别之九--os库

来源:http://www.sh-fengwen.com 作者:家常菜谱 人气:172 发布时间:2019-09-04
摘要:python第三方库系列之九--os库 我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数。想要知道有哪些方法,我们可以运行下面的

python第三方库系列之九--os库

我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数。想要知道有哪些方法,我们可以运行下面的语句,就可以在屏幕上输出os模块的所有信息:

import os
help(os)

如果你对linux基本操作了解的话,下面的一些os方法应该会很熟悉的,因为基本和linux下的操作方法相同。下面举几个常用的:
1.os.getcwd() 获得当前路径
讲到路径,顺便讲讲路径的几种方法

import os

Base1 = os.path.dirname(__file__)
Base2 = os.path.abspath(__file__)
BASE_DIR1 = os.path.dirname(os.path.dirname(__file__))
BASE_DIR2 = os.path.dirname(os.path.abspath(__file__))
join_dir = os.path.join(BASE_DIR1,'templates')
join_dir2 = os.path.join(BASE_DIR1, '..')

print "__file__:            ",__file__
print "os.path.dirname:     ",Base1
print "os.path.abspath:     ",Base2
print "double dirname:      ",BASE_DIR1
print "dirname and abspath: ",BASE_DIR2
print "join_dir:            ",join_dir

#__file__:             /Users/admin/PycharmProjects/test/dirTest.py
#os.path.dirname:      /Users/admin/PycharmProjects/test
#os.path.abspath:      /Users/admin/PycharmProjects/test/dirTest.py
#double dirname:       /Users/admin/PycharmProjects
#dirname and abspath:  /Users/admin/PycharmProjects/test
#join_dir:             /Users/admin/PycharmProjects/templates

2.os.listdir(path) 获得目录中的内容
3.os.mkdir(path) 创建目录
4.os.rmdir(path) 删除目录
5.os.isdir(path) os.isfile(path) 判断是否为目录或者文件
6.os.remove(path) 删除文件
7.os.rename(old, new) 重命名文件或者目录
8.os.name 输出字符串指示正在使用的平台。如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'
9.os.system() 运行shell命令
10.os.path.split() 返回一个路径的目录名和文件名
11.os.path.splitext() 分离文件名与扩展名
12.os.path.getsize(name) 获得文件大小,如果name是目录返回0L
13.os.getegid() 返回当前进程(process)所属的有效group id 只有unix可用
14.os.geteuid() 返回当前进程所属的用户ID (Unix)
15.os.getgid() 返回当前进程所属的真实组ID(real group id)
16.os.getlogin() 返回当前登陆用户名
17.os.getpgrp() 返回当前进程组的ID(Unix)
18.os.getpid() 返回当前进程的PID,( Unix, Windows )
19.os.getppid() 返回当前进程父进程的ID(Unix)
20.os.getuid() 返回当前进程所属用户ID(Unix)

我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数...

python第三方库系列之十七--multiprocessing库

说到并发,我们想到多线程和多进程。

那到底使用多进程还是多线程呢?这得看情况。我们的程序一般分为:

1)耗网络的(有很大一部分时间是在网络交互);

2)耗CPU的(得充分利用多核)

在第一种情况,时间大部分被网络延时占用,所以使用多线程和多进程都差不多。

在第二种情况,时间的长短由CPU是否被充分利用决定,看《python第三方库系列之十二--多线程threading库》可知,多线程会出现锁机制,所以多进程更胜一筹,充分利用了CPU,节省了时间。

以下是一个多进程例子:

 

#coding=utf-8
import os
import traceback
import time
from multiprocessing import Process, Manager

CASE_COUNTS = 100
PROCESS_COUNTS = 10

def assign_task_index(index):
    try:
        if CASE_COUNTS % PROCESS_COUNTS == 0:
            section_num = CASE_COUNTS / PROCESS_COUNTS
        else:
            section_num = CASE_COUNTS / PROCESS_COUNTS + 1
        if CASE_COUNTS % section_num == 0:
            process_count = CASE_COUNTS / section_num
        else:
            process_count = CASE_COUNTS / section_num + 1
        start_index = section_num * (index - 1) + 1
        end_index = section_num * index
        if index == process_count:
            end_index = CASE_COUNTS
        #print start_index, end_index
        return start_index, end_index
    except Exception as e:
        print traceback.format_exc()

def do_single_process(index, q):
    start_index, stop_index = assign_task_index(index)
    for i in range(start_index, stop_index+1):
        try:
            is_even_number = i % 2
            if is_even_number == 0:
                q.put(i)
            else:
                #print i
                pass
        except Exception as e:
            print traceback.format_exc()


def do_multi_process():
    try:
        process_queue = []
        m = Manager()
        q = m.Queue()  # 用于进程间通信,记录运行结果
        for index in range(PROCESS_COUNTS) :
            try :
                pid = Process(target=do_single_process, args=(index+1, q))
            except :
                print traceback.format_exc()
                os._exit(-1)
            else :
                process_queue.append(pid)

        time_start = time.time()
        for pid in process_queue :
            pid.start()

        # 等待所有进程都完成
        for pid in process_queue:
            pid.join()

        time_end = time.time()
        time_delta = time_end - time_start
        print "总共个数:%s,偶数个数:%s,奇数个数:%s,耗时(秒):%s" % 
              (str(CASE_COUNTS), str(q.qsize()), str(CASE_COUNTS - q.qsize()), str(time_delta))
    except Exception as e:
        print traceback.format_exc()


if __name__ == '__main__':
    do_multi_process()

 

说到并发,我们想到多线程和多进程。 那到底使用多进程还是多线程呢?这得看情况。我们的程序...

本文由美高梅游戏平台网站发布于家常菜谱,转载请注明出处:python第三方库类别之九--os库

关键词:

最火资讯