• python标准库 #69


    string

    • string.capwords(word)

    给word首个字母大写

    s = 'The quick brown fox jumped over the lazy dog'
    print string.capwords(s)
    
    >>>The Quick Brown Fox Jumped Over The Lazy Dog
    
    • string.maketrans() s.translate()

    文本替换跟replace差不多

    s = 'The quick brown fox jumped over the lazy dog'
    leet = string.maketrans('abcdefghijk','12312322222')   
    print s.translate(leet)
    
    >>> T22 qu233 2rown 2ox 2ump21 ov2r t22 l1zy 1o2
    
    • string.Template() [ t.substitute() t.safe_substitute() ]

    替换的收获分为正常替换和安全替换,正常替换的收获如果参数不够会抛出异常, KeyError ,安全替换则是根据元文档直接写入

    value = {'var': 'foo'}
    t = string.Template('''
    	variable             :$var
    	Escape               :$$
    	variable in text     :${var}iable
    	''')
    print t.substitute(value)
    
    >>>	variable             :foo
    	Escape               :$
    	variable in text     :fooiable
    

    textwrap

    用于文本梅花

    • textwrap.fill(words,with=50)限定每行有50个字符
    • textwrap.dedent(words)去除文本的每行缩进
    sample_text = '''
    	the textwrap module can be used to format text for  output in 
    	situations where pretty-printing is desired. it offers programmatic functionalite
    	similar to the paragraph wrapping or filling features found in many text editors.
    '''
    print textwrap.fill(sample_text,width=79)
    print textwrap.dedent(sample_text)
    
    
    >>>       the textwrap module can be used to format text for  output in
    situations where pretty-printing is desired. it offers programmatic
    functionalite         similar to the paragraph wrapping or filling features
    found in many text editors.
    
    the textwrap module can be used to format text for  output in 
    situations where pretty-printing is desired. it offers programmatic functionalite
    similar to the paragraph wrapping or filling features found in many text editors.
    

    re

    正则表达式 regex

    pattern = 'this'
    text = 'does this text mathch the pattern'
    match = re.search(pattern, text)
    print match.start(), match.end()
    print match.string, '  ', match.re.pattern
    regexs = [re.compile(p) for p in ['this', 'that']]
    for regex in regexs:
        print regex.pattern,
        if regex.search(text):
            print 'match'
        else:
            print 'no match'
    
    text = 'ababbabba'
    pattern = 'ab(a)'
    for match in re.findall(pattern, text):
        print match   # match 是一个字符串
    
    for match in re.finditer(pattern, text):
        print match.start(), match.end()   # 返回的是match 迭代器
    
    print re.search(pattern, text).group()   #
    print re.search(pattern, text).group(0)  # 表示获取的整个文本
    print re.search(pattern, text).group(1)  # 表示第几个分组
    
    >>>
    5 9
    does this text mathch the pattern    this
    this match
    that no match
    a
    0 3
    aba
    aba
    a
    

    difflib

    text1 = '''Lorem ipsum dolor sit amet.consecteture
    dddddd
    dfdasfd'''
    
    text2 = '''Lorem iisum dolor sit amet
    dddddd
    dfdasfd'''
    
    
    d = difflib.Differ()
    diff = d.compare(text1.splitlines(), text2.splitlines())
    print '
    '.join(diff)
    print '------'
    print '
    '.join(list(diff))
    
    >>>
    - Lorem ipsum dolor sit amet.consecteture
    ?        ^                  -------------
    
    + Lorem iisum dolor sit amet
    ?        ^
    
      dddddd
      dfdasfd
    ------
    []
    

    collections

    Counter, defaultdict, deque, namedtuple, OrderedDict # 有序的字典
    text = 'faasfasdfsad'
    
    a = Counter(text)
    a['h'] = 1
    print a
    a.update('fdafds')
    print a
    print list(a.elements())  # 生成所有的元素
    print a.most_common(2)   # 返回最常用的2个元素
    
    # 支持算术操作  + - * /
    b = Counter('fdasf')
    print a + b
    
    
    def calld():
        return 'nnnn'
    
    
    d = defaultdict(calld, foo='bar')
    print d
    print d['dd']
    print d
    # 双端队列是线程安全的
    d = deque('fdafds')
    print d
    print len(d)
    print d[0]
    
    
    candle = deque(xrange(10))
    candle.rotate(2)   # 用于对联的旋转。即将后面的移动到前面
    
    
    def burn(direction, nextSource):
        while True:
            try:
                next = nextSource()
            except Exception as e:
                break
            else:
                print '%8s:%s' % (direction, next)
                # time.sleep(0.1)
        print "%8s done " % direction
        return
    
    
    left = Thread(target=burn, args=('left', candle.popleft))
    right = Thread(target=burn, args=('right', candle.pop))
    
    left.start()
    right.start()
    
    # 第一个参数名为新类的名字,另外一个可以是字符串或者以可迭代的组
    # Person = namedtuple('Person', ('name', 'age', 'gender'))
    # 避免关键字冲突和命名重复like class
    Person = namedtuple('Person', 'name age gender')
    print Person.__doc__
    
    bob = Person(name='bobd', age=30, gender='male')
    print bob[0], bob.name
    
    >>>
    Counter({'a': 4, 's': 3, 'f': 3, 'd': 2, 'h': 1})
    Counter({'a': 5, 'f': 5, 's': 4, 'd': 4, 'h': 1})
    ['a', 'a', 'a', 'a', 'a', 'h', 's', 's', 's', 's', 'd', 'd', 'd', 'd', 'f', 'f', 'f', 'f', 'f']
    [('a', 5), ('f', 5)]
    Counter({'f': 7, 'a': 6, 's': 5, 'd': 5, 'h': 1})
    defaultdict(<function calld at 0x00000000029B1EB8>, {'foo': 'bar'})
    nnnn
    defaultdict(<function calld at 0x00000000029B1EB8>, {'dd': 'nnnn', 'foo': 'bar'})
    deque(['f', 'd', 'a', 'f', 'd', 's'])
    6
    f
        left:8
        left:9
        left:0
        left:1
        left:2   right:7
    
        left:3   right:6
    
        left:4   right:5
    
        left done Person(name, age, gender)   right done 
    
    
    bobd bobd
    

    bisect

    l = []
    for i in range(1, 15):
        r = random.randint(1, 100)
        position = bisect.bisect(l, r)   # 查看当前的数字会在列表排在那个位置,但实际并没有真正的擦入
        bisect.insort(l, r)
        print '%3d  %3d ' % (r, position), l
        bisect.insort
    
    # new pos content
    # ---------------
    #  81    0  [81]
    #  92    1  [81, 92]
    #  80    0  [80, 81, 92]
    #  17    0  [17, 80, 81, 92]
    #  13    0  [13, 17, 80, 81, 92]
    #   6    0  [6, 13, 17, 80, 81, 92]
    #  41    3  [6, 13, 17, 41, 80, 81, 92]
    #  66    4  [6, 13, 17, 41, 66, 80, 81, 92]
    #  59    4  [6, 13, 17, 41, 59, 66, 80, 81, 92]
    #   8    1  [6, 8, 13, 17, 41, 59, 66, 80, 81, 92]
    #  25    4  [6, 8, 13, 17, 25, 41, 59, 66, 80, 81, 92]
    #   9    2  [6, 8, 9, 13, 17, 25, 41, 59, 66, 80, 81, 92]
    #  83   11  [6, 8, 9, 13, 17, 25, 41, 59, 66, 80, 81, 83, 92]
    #  99   13  [6, 8, 9, 13, 17, 25, 41, 59, 66, 80, 81, 83, 92, 99]
    

    queue

    
    q = Queue.Queue()    # FIFO 先进先出模式
    
    for i in range(5):
        q.put(i)
    
    while not q.empty():
        print q.get(),
    print
    
    q = Queue.LifoQueue()  # LIFO 后进入先出模式
    
    for i in range(5):
        q.put(i)
    
    while not q.empty():
        print q.get(),
    print
    
    
    class Job(object):
        def __init__(self, priority, decription):
            self.priority = priority
            self.decription = decription
            print 'new job:', decription
    
        def __cmp__(self, other):
            return cmp(self.priority, other.priority)
    
    
    q = Queue.PriorityQueue()  # 优先级别队列,级别越低先出来
    
    q.put(Job(3, 'Mid-level job'))
    q.put(Job(10, 'Low-level job'))
    q.put(Job(1, 'high-level job'))
    
    
    def process_job(q):
        while True:
            next_job = q.get()
            print 'processs job', next_job.decription
            q.task_done()  # 表示在完成一个工作后,向队列发送已经完成的信号,如果没了,那么就停止进程阻塞
    
    
    workers = [threading.Thread(target=process_job, args=[q, ]),
               threading.Thread(target=process_job, args=[q, ])]
    
    for w in workers:
        w.setDaemon(True)  #  主线程产生子进程,如果主线程结束,会把子线程给杀死,如果没有设置,那么子线程还存在
        w.start()
    
    q.join()   # 意味这等到队列为空执行别的操作   貌似是将当前主现成阻塞等待task_done全部完成没有队列位置才放开线程
    
    time.sleep(2)
    print '11111'
     
    # 0 1 2 3 4
    # 4 3 2 1 0
    # new job: Mid-level job
    # new job: Low-level job
    # new job: high-level job
    # processs job high-level job
    # processs job Mid-level job
    # processs job Low-level job
    # 11111
    # [Finished in 2.1s]
    

    struct

    values = (1, 'ab', 2.7)
    s = struct.Struct('I 2s f')
    packed_data = s.pack(*values)
    
    print values
    print s.format
    print s.size
    print binascii.hexlify(packed_data)
    
    
    data = s.unpack(binascii.unhexlify('0100000061620000cdcc2c40'))
    print data
    
    
    # (1, 'ab', 2.7)
    # I 2s f
    # 12
    # 0100000061620000cdcc2c40
    # (1, 'ab', 2.700000047683716)
    

    weakref

    对象弱引用,如果对象被销毁内存急需内存的收获可以删除该弱引用的对象

    class ExpensiveObject(object):
    
        def __del__(self):
            print 'delete %s' % self
    
    
    def callback(reference):
        print 'callback', reference
    
    
    obj = ExpensiveObject()
    r = weakref.ref(obj, callback)   # 可以增加回调函数用于告知对象销毁
    
    print obj
    print r
    print r()
    print '111'
    del obj
    print '222'
    print r()
    

    functools

    def myfunc(a, b=2):
        "doc for myfunc"
        print 'call', (a, b)
        return
    
    
    def show_detail(name, f):
        print name
        print f
    
        try:
            print f.__name__
        except:
            print 'no name'
        print f.__doc__
    
    
    def show_details(name, f, is_partial=False):
        print name
        print f
        if not is_partial:
            print f.__name__
        if is_partial:
            print f.func
            print f.args
            print f.keywords
        return
    
    
    myfunc('a', 3)
    show_details('myfunc', myfunc)
    p1 = functools.partial(myfunc, b=4)    # partial 对象没有  __name__ 和 __doc__对象
    print '=================================='                          # 可以使用functools.update_wrapper()将原函数的内容复制进去
    show_details('partial with name default ', p1, True)
    p1('passs')
    p1('overrid', b=5)
    
    print '=================================='
    show_detail('myfunc', myfunc)
    p1 = functools.partial(myfunc, b=4)
    show_detail('raw wrapper', p1)
    print '********************************'
    print functools.WRAPPER_ASSIGNMENTS
    print functools.WRAPPER_UPDATES
    print '********************************'
    functools.update_wrapper(p1, myfunc)
    show_detail('raw wrapper', p1)
    
    print '============='
    
    
    def fun(f):
        @functools.wraps(f)
        def decorst(a='1', b='2'):
            print f.__name__
            print a, b
            return f
        return decorst
    
    
    @fun
    def dec(a, b):
        myfunc(a, b)
    
    
    dec(2, 3)
    
    
    # call ('a', 3)
    # myfunc
    # <function myfunc at 0x0000000002A989E8>
    # myfunc
    # ==================================
    # partial with name default 
    # <functools.partial object at 0x0000000002AA4278>
    # <function myfunc at 0x0000000002A989E8>
    # ()
    # {'b': 4}
    # call ('passs', 4)
    # call ('overrid', 5)
    # ==================================
    # myfunc
    # <function myfunc at 0x0000000002A989E8>
    # myfunc
    # doc for myfunc
    # raw wrapper
    # <functools.partial object at 0x0000000002AA42C8>
    # no name
    # partial(func, *args, **keywords) - new function with partial application
    #     of the given arguments and keywords.
    
    # ********************************
    # ('__module__', '__name__', '__doc__')
    # ('__dict__',)
    # ********************************
    # raw wrapper
    # <functools.partial object at 0x0000000002AA42C8>
    # myfunc
    # doc for myfunc
    # =============
    # dec
    # 2 3
    
    

    from itertools import *

    
    for i in chain([1, 2, 3], ['a', 'b', 'c']):   # 处理多个序列而不必构造一个大的列表
        print i,
    print
    
    for i in izip([1, 2, 3], ['a', 'b', 'c']):    # 返回迭代器而不是返回列表
        print i,
    print
    
    for i in islice(count(), 5):  # 返回一个迭代器
        print i,
    print
    
    for i in islice(count(), 5, 10):
        print i,
    print
    
    for i in islice(count(), 0, 100, 10):
        print i,
    print
    
    r = islice(count(), 5)
    i1, i2 = tee(r)
    
    print list(i1)
    print list(i2)
    
    
    # 1 2 3 a b c
    # (1, 'a') (2, 'b') (3, 'c')
    # 0 1 2 3 4
    # 5 6 7 8 9
    # 0 10 20 30 40 50 60 70 80 90
    # [0, 1, 2, 3, 4]
    # [0, 1, 2, 3, 4]
    

    contextlib

    # 传统编写上下文
    class WithContext(object):
        def __init__(self, context):
            print context
    
        def dosomething(self):
            print 'do something'
    
        def __del__(self):
            print 'del'
    
    
    class Context(object):
        def __init__(self):
            print 'context __init__'
    
        def dosomething(self):
            print 'do something'
    
        def __enter__(self):
            print 'enter'
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print 'context exit'
    
    
    with Context() as c:
        print c.dosomething()
    
    print '============='
    
    @contextlib.contextmanager
    def make_context():
        print 'enterign'
        try:
            yield {}
        except RuntimeError , err:
            print err
        finally:
            print 'exiting'
    
    with make_context() as value:
        print value
    
    
    # context __init__
    # enter
    # do something
    # None
    # context exit
    # =============
    # enterign
    # {}
    # exiting
    

    import time

    print time.time()    # 1477448222.86
    later = time.time() + 15
    print time.ctime(later)   # 格式化时间   # Wed Oct 26 10:17:17 2016
    
    for i in range(5):
        h = hashlib.sha1()
        print time.ctime(), time.time(), time.clock()
    
    # Wed Oct 26 10:17:03 2016 1477448223.3 0.438315857686
    # Wed Oct 26 10:17:03 2016 1477448223.74 0.874749253736
    # Wed Oct 26 10:17:04 2016 1477448224.17 1.31385075364
    # Wed Oct 26 10:17:04 2016 1477448224.61 1.74753680793
    # Wed Oct 26 10:17:05 2016 1477448225.05 2.18923808103
    
    print type(time.time())   # 得到的是一个浮点数  # <type 'float'>
    print type(time.ctime())  # 得到的是一个字符串  # <type 'str'>
    
    def show_struct(s):
        print s.tm_year
        print s.tm_mon
        print s.tm_mday
        print s.tm_hour
        print s.tm_min
        print s.tm_sec
        print s.tm_wday
        print s.tm_yday
        print s.tm_isdst
    
    print time.asctime()    # Wed Oct 26 10:31:38 2016
    print time.ctime()      # Wed Oct 26 10:31:38 2016
    print time.gmtime()     # utc time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=2, tm_min=20, tm_sec=18, tm_wday=2, tm_yday=300, tm_isdst=0)
    print time.localtime()  # 本地时间 time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=10, tm_min=20, tm_sec=18, tm_wday=2, tm_yday=300, tm_isdst=0)
    print time.mktime(time.localtime())  # 1477448503.0
    print '-----------------------------'
    
    a = time.ctime()
    print a   # Wed Oct 26 10:38:55 2016
    print time.strptime(a)  # time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=10, tm_min=38, tm_sec=55, tm_wday=2, tm_yday=300, tm_isdst=-1)
    print time.strftime("%a %b %d %H:%M:%S %Y", time.strptime(a))   # Wed Oct 26 10:38:55 2016
    print time.strptime('Wed Oct 26 10:31:38 2016')                 # time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=10, tm_min=31, tm_sec=38, tm_wday=2, tm_yday=300, tm_isdst=-1)
    
    print time.mktime(time.strptime('Wed Oct 26 10:31:38 2016') )  #1477449098.0
    

    datetime

    t = datetime.time(1, 2, 3)
    print t   # 01:02:03   # <type 'datetime.time'>
    print t.hour   # 1
    
    today = datetime.date.today()
    print today  # 2016-10-26
    print today.ctime()   # Wed Oct 26 00:00:00 2016
    print today.timetuple()  # time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=300, tm_isdst=-1)
    print today.replace(year=10)   # 0010-10-26  可进行相关替换
    print datetime.datetime.today().ctime()  # Wed Oct 26 10:53:02 2016
    print datetime.datetime.today()
    print datetime.timedelta(hours=1)   # 参数后面需要加s
    print datetime.timedelta(hours=1).total_seconds()  # 3600.0
    print datetime.datetime.strptime('Wed Oct 26 00:00:00 2016', "%a %b %d %H:%M:%S %Y")# 2016-10-26 00:00:00
    
    

    random

    for i in xrange(5):
        print random.random(),  # 生成 0,1之间的随机数
    print
    
    for i in xrange(5):
        print random.uniform(1, 100),  # 生成指定数值区间的数目
    print
    
    
    random.seed(10)
    print "Random number with seed 10 : ", random.random()
    print "Random number with seed 10 : ", random.random()
    # 生成同一个随机数
    random.seed(10)
    print "Random number with seed 10 : ", random.random()
    print "Random number with seed 10 : ", random.random()
    # 生成同一个随机数
    random.seed(10)
    print "Random number with seed 10 : ", random.random()
    
    state = random.getstate()  # 获得随机状态
    random.setstate(state)  # 设置随机状态
    
    random.seed()
    print random.randint(-5, 5)
    print random.choice(['12312', 'adfadsf'])
    
    list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    random.shuffle(list)  #  给一个序列随机洗牌   改变原来的序列
    print list
    
    list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    slice = random.sample(list, 5)  # 从list中随机获取5个元素,作为一个片断返回   不改变原来的序列
    print slice
    
    print random.Random()      # 生成一个随机对象,可以拥有random的所有函数使用的使用方法
    print random.SystemRandom(12).random()
    
    # 0.328842693603 0.348691790654 0.41475079426 0.130556890269 0.851020432626
    # 12.911633401 1.63257413485 48.8556069495 78.7545414688 9.48420727765
    # Random number with seed 10 :  0.57140259469
    # Random number with seed 10 :  0.428889054675
    # Random number with seed 10 :  0.57140259469
    # Random number with seed 10 :  0.428889054675
    # Random number with seed 10 :  0.57140259469
    # -1
    # 12312
    # [9, 5, 6, 1, 10, 2, 7, 8, 3, 4]
    # [2, 1, 10, 6, 5]
    # <random.Random object at 0x00000000030181E8>
    # 0.655502074592
    

    os.path

    for path in ['/one/two/three',
                 '/one/two/three/',
                 '/',
                 '.',
                 '']:
        print path, ':', os.path.split(path)
    
    # /one/two/three : ('/one/two', 'three')
    # /one/two/three/ : ('/one/two/three', '')
    # / : ('/', '')
    # . : ('', '.')
    #  : ('', '')
    for path in ['/one/two/three',
                 '/one/two/three/',
                 '/',
                 '.',
                 '']:
        print path, ':', os.path.basename(path)
    # /one/two/three : three
    # /one/two/three/ :
    # / :
    # . : .
    #  :
    for path in ['/one/two/three',
                 '/one/two/three/',
                 '/',
                 '.',
                 '']:
        print path, ':', os.path.dirname(path)
    # /one/two/three : /one/two
    # /one/two/three/ : /one/two/three
    # / : /
    # . :
    #  :
    for path in ['filename.txt',
                 'filename',
                 '/path/to/filename.txt',
                 '/',
                 '',
                 'my-archive.tar.gz',
                 'no-extension.',
                 ]:
        print path, ':', os.path.splitext(path)
    
    # filename.txt : ('filename', '.txt')
    # filename : ('filename', '')
    # /path/to/filename.txt : ('/path/to/filename', '.txt')
    # / : ('/', '')
    #  : ('', '')
    # my-archive.tar.gz : ('my-archive.tar', '.gz')
    # no-extension. : ('no-extension', '.')
    
    
    print os.path.commonprefix(['/one/two/three/four',
                                '/one/two/threefold',
                                '/one/two/three'])
    # /one/two/three 返回一个公共的文件前缀
    
    path = ['one', 'two', 'three']
    print os.path.join(*path)   # one	wo	hree  需要用*号最为前缀。 接受2个参数 (x , *x)
    print os.path.join('/aaa', '/ffd', '/fdf')   # /fdf 会丢掉前面的 以os.sep开头的字母
    print os.path.expanduser('~ddd')  # C:Userszhoulei/ddd   将~转换成当前用户名
    print os.path.normpath('one//two//three')  # one	wo	hree 清除多余分隔符
    print os.path.abspath('.')  # C:learnplacepython_standard_lib  返回绝对路径
    print time.ctime(os.path.getatime(__file__))  # Wed Oct 26 14:14:35 2016  访问时间
    print time.ctime(os.path.getmtime(__file__))  # Wed Oct 26 15:29:48 2016 修改时间
    print time.ctime(os.path.getctime(__file__))  # Wed Oct 26 14:14:34 2016 创建时间
    print os.path.getsize(__file__)  # 2534  获取当前文件的数据量
    print __file__  # C:learnplacepython_standard_lib	est22.py
    print os.path.isabs(__file__)  # True  绝对路径
    print os.path.isdir(__file__)  # Flase  是一个文件夹
    print os.path.isfile(__file__)  # True  是一个文件
    print os.path.islink(__file__)  # FALSE
    print os.path.ismount(__file__)  # FALSE
    print os.path.exists(__file__)  # True
    print os.path.lexists(__file__)  # True   link exist
    print os.extsep  # .
    print os.sep  # /
    print os.pardir  # ..
    print os.curdir  # .
    
    
    # os.path.walk()
    

    import glob

    # *星号 表示匹配0个或者多个
    for name in glob.glob('c:learnplace**'):
        print name
    
    print '========================='
    # c:learnplacepython_standard_lib	est1.py
    # c:learnplacepython_standard_lib	est10.py
    # c:learnplacepython_standard_lib	est11.py
    # c:learnplacepython_standard_lib	est12.py
    # c:learnplacepython_webdevelop_testdrivergeckodriver.log
    # c:learnplacepython_webdevelop_testdriversuperlists
    
    # ? 匹配单个字
    for name in glob.glob(r'c:learnplace*	est?.py'):
        print name
    
    
    print '========================='
    # c:learnplacepython_standard_lib	est1.py
    # c:learnplacepython_standard_lib	est2.py
    # c:learnplacepython_standard_lib	est3.py
    # c:learnplacepython_standard_lib	est4.py
    # c:learnplacepython_standard_lib	est5.py
    
    # [a-z] [1-9] 字符区间
    
    for name in glob.glob(r'c:learnplace*	est[1-2].py'):
        print name
    # c:learnplacepython_standard_lib	est1.py
    # c:learnplacepython_standard_lib	est2.py
    

    tempfile

    linecache

    print linecache.getline("c:learnplacepython_webdevelop_testdrivergeckodriver.log", 522)  # 超过后会返回一个空串
    #  
    print __file__
    # C:learnplacepython_standard_lib	est24.py
    print linecache.__file__
    # C:Python27liblinecache.pyc
    module_line = linecache.getline(linecache.__file__[:-1], 13)
    print module_line
    
    print tempfile.gettempdir()  # c:userszhouleiappdatalocal	emp
    print tempfile.gettempprefix()  # tmp
    

    shutil

    # 复制文件
    shutil.copyfile(src, dst)  # src ,dst 均为文件
    shutil.copy(src, dst)  # 复制文件 src为源文件,dst为目标文件夹
    shutil.copy2(src, dst)  # 强复制。复制访问信息,创建时间等  src为源文件,dst为目标文件夹
    shutil.copymode(src, dst)  # linux中的权限也复制  src ,dst 均文文件   0444
    shutil.copystat  # 复制文件的关联权限和时间
    
    shutil.copytree()  # 复制一个目录下的所有文件到一个不存在的文件夹下
    shutil.rmtree()  # 删除一个目录树
    shutil.move()  # 跟linux 到mv一样
    
  • 相关阅读:
    iOS开发日记1-tableview编辑
    nginx安装-del
    linux服务器su之后变成bash-4.1#
    PhoneGap & HTML5 学习资料网址
    PhoneGap通信机制的实现原理
    Android调用Java WebSevice篇之二
    Android调用Java WebSevice篇之一
    Java开发牛人十大必备网站
    百度地图生产工具
    PS制作圆角透明图片
  • 原文地址:https://www.cnblogs.com/Zidon/p/5991935.html
Copyright © 2020-2023  润新知