zoukankan      html  css  js  c++  java
  • python基础-文件和目录

    1. 字符串小练习

    >>> s="1a2a3a4a5a"

    >>> s1=s.split('a')

    >>>

    >>> s1

    ['1', '2', '3', '4', '5', '']

    >>> 'b'.join(s1)

    '1b2b3b4b5b'

     

    1. 小复习:

    >>> import os

    >>> os.linesep #查询换行符

    ' '

    >>> os.name

    'nt'

     

    练习:

    >>> os.path.exists("e: \test1")
    True
    >>> os.path.exists("e: \test1xxx")
    False
    题目:判断一个文件是否存在,如果不存在,则创建这个文件,如果在,就把文件的内容做个输出

    >>> if os.path.exists("e:\b.py"):
    ...     with open("e:\b.py") as fp:
    ...         print fp.read()
    ... else:
    ...     with open("e:\b.py",'w') as fp:
    ...         fp.write("")
    ...

     

     

     

    1. 查看环境变量换行符:

    >>> os.sep

    '\'

    >>> os.pathsep

    ';'

    >>>

     

    1. 查看目录:

    >>> os.system("dir")

     

    >>> os.system("dir2")
    'dir2' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    1

    这个命令的强大之处,利用linux命令在windows下执行。

     

    1. 面试:要会linux命令,30个左右。

    Eg:怎么查询动态日志

    tail -f 

    小技巧:被问到的命令不会,可以转移一下说自己忘记了,但是会其他的命令。表明自己不是一点都不懂。

    awk列处理

    sed行处理

    shell    

    测试人员经常用到shell命令,安装和维护测试环境时使用。

    常用shell:sort,unique,vmstat,iostat,free

     

    1. 判断当前所在目录:

    >>> os.getcwd()

    'E:\'

    1. 查询方法:

    >>> dir(os)

    >>> dir(os.path)

     

    1. 创建目录:

    >>> os.mkdir("test1")

     

    练习:题目:创建一个10层深的目录,每个目录下面,创建一个和目录名一致的txt文件

    算法:先创建一级目录,进入该目录,创建文件;再此目录下再次创建目录,进入,创建文件和目录……

    # -*- coding: utf-8 -*- #
    import os
    os.chdir("e:\test6")  #先进入到一个目录,在这个下面创建
    for i in range(1,11):
        os.mkdir("gloryroad"+str(i))


        os.chdir("gloryroad"+str(i))  #进入到新创建的目录
        with open("gloryroad"+str(i)+".txt","w") as fp:
            fp.write("")

     

    也可以直接pass,不写入空

    # -*- coding: utf-8 -*- #

    import os

    #os.chdir("e:\test6")

    for i in range(1,11):

        os.mkdir("gloryroad"+str(i))  #用到str做类型强转,因为字符串和数字不能直接拼接

        os.chdir("gloryroad"+str(i))

        with open("gloryroad"+str(i)+".txt","w") as fp:

            pass

     

    直接用getcwd是不能进入到新建的以及目录中并且保持不变的。

    # -*- coding: utf-8 -*- #

    import os

    #os.chdir("e:\test6")

    for i in range(1,11):

        os.mkdir("gloryroad"+str(i))

        os.getcwd()

        with open("gloryroad"+str(i)+".txt","w") as fp:

            fp.write("")

    结果是都建立在了同一级。

     

     

     

    1. 创建多级目录:

    >>> os.makedirs(r"e:\12345")

     

    1. 其他操作目录命令:

    安装命令:os.system("pip list")

    删除目录:>>> os.removedirs(r"e:12345")  有内容的没办法直接删

    从后往前开始执行删除,4,5没有内容会删除,但如果3有内容会到此停止,不在往上继续删。

    删除一个目录下所有内容:>>> shutil.rmtree("e:\test1") 有内容也会直接删除,把根目录都直接删除了。

    删除操作前要先看自己在哪个目录下才行。

     

    判断目录下有哪些:

    >>> os.listdir("e:")

    判断是否是文件:

    >>> os.path.isfile("e:\b.py")

    判断是否是目录:

    >>> os.path.isdir("e:\b.py")

    路径拼接:从当前目录去到其他路径,而不是手动切换。

    >>> os.path.join("e:\","a.py")

    'e:\a.py'

     

    练习:统计一个目录下的文件和目录的个数

    # -*- coding: utf-8 -*- #

    import os

    os.chdir("e:\test1")

    file_num=0

    dir_num=0

    for i in os.listdir("e:\test1"):

        if os.path.isfile(i):

            file_num+=1

        if os.path.isdir(i):

            dir_num+=1

    print "file_num:%s" %file_num

    print "dir_num:%s" %dir_num

     

     

    老师的方法:

    # -*- coding: utf-8 -*- #
    import os
    def count_file_and_dir_number(dir_path):
        if not os.path.exists(dir_path):
            return 0,0
        os.chdir(dir_path)
        file_num=0
        dir_num=0
        for i in os.listdir(dir_path):
            if os.path.isfile(i):
                file_num+=1
            else:
                dir_num+=1
        return file_num,dir_num
    file_num,dir_num=count_file_and_dir_number("e:\test1")
    print "file number:%s" %file_num
    print "dir number:%s" %dir_num

     

    1. Remove删除一个文件

    >>> import os

    >>> os.remove("e:\b.py")

    1. 改名字

    >>> os.rename("e:\b.txt","e:\c.txt")

     

    1. 查看文件的操作时间:

    >>> import time

    >>> time.localtime(1501111) 

    time.struct_time(tm_year=1970, tm_mon=1, tm_mday=18, tm_hour=16, tm_min=58, tm_s

    ec=31, tm_wday=6, tm_yday=18, tm_isdst=0)

    >>> t1=time.localtime(123444)

    >>> time.strftime("%Y-%m-%d",t1) 年月日

    '1970-01-02'

    >>> time.strftime("%Y-%m-%d %H-%M-%S",t1) 年月日时分秒

    '1970-01-02 18-18-24'

     

    1. 设定文件的访问时间和修改时间

    os.utime(r'c:gloryroadtest.txt',(1375448978,1369735977)) 

     

    目录也适用: os.utime(r'c:gloryroadtest',(1375448978,1369735977))

     

    1. 制造临时文件

    #encoding=utf-8

    import os

    file=os.tmpfile()

    file.write("hi1 ")

    file.write("hi2 ")

    file.write("hi3 ")

    file.seek(0)

    for i in file:

        print i

    print file

     

    file.close()

     

    1. 获取系统环境变量

    >>> os.environ

     

    1. 判断文件操作权限

    import os
    print os.access(r'c:gloryroadtest.txt', os.W_OK)
    print os.access(r'c:gloryroadtest.txt', os.R_OK)
    print os.access(r'c:gloryroadtest.txt', os.X_OK)

     

    1. 修改文件操作权限

    import os
    os.chmod(r'c:gloryroadtest.txt', 777) 

    在linux上才有效,设定文件权限为可读、可写、可执行。421

     

    1. 运行shell命令,并返回一个文件对象。然后通过操作文件的方法去操作这个文件对象。

    >>> dirList = os.popen('dir d:\test*.*')

    >>> for i in dirList.readlines():

    ...     print i

    ...

     驱动器 D 中的卷是 DATA

     

     卷的序列号是 66BF-D3EA

     

     d: 的目录

     

    1. *** 重点:遍历目录下所有目录和文件

    import os

    for root, dirs, files in os.walk("e:\test1",topdown=False) :

        print u"当前目录:",root #打印目录绝对路径

        for name in files :

            print u'文件名:',os.path.join(root,name) #打印文件绝对路径

        for name in dirs :

            print u'目录名:',name #打印目录绝对路径

    False从最深往上开始遍历

     

     

    import os

    for root, dirs, files in os.walk("e:\test1",topdown=True) :

        print u"当前目录:",root #打印目录绝对路径

        for name in files :

            print u'文件名:',os.path.join(root,name) #打印文件绝对路径

        for name in dirs :

            print u'目录名:',name #打印目录绝对路径

    True是从最浅往最深开始遍历

     

     

    老师总结:

    False#topdown =Fasle 表示遍历从下向上开始
    #topdown =True 表示遍历从上向下开始
    先把当前要遍历目录下的子目录从小到大排序,
    然后从最小的目录开始遍历,如果是topdown =Fasle
    则从下向上遍历,如果是topdown =True则
    从上到下遍历。root:当前正在的遍历的目录名称
    dirs:表示正在被遍历目录中的所有子目录,dirs是个list
    files:表示正在被遍历目录中的所有文件,files是个list

     

    同学的方法:

    >>> for root,dirs,files in os.walk("e:\test1",topdown=True) :

    ...     print root,dirs,files

    ...

     

     

    1. 获取绝对路径

    >>> import os

    >>> os.path.abspath("b.txt")

    'E:\b.txt' #返回值是一个字符串

     

    1. 文件和目录分离

    >>> os.path.split("e:\test1\a.txt")

    ('e:\test1', 'a.txt')

    也可以把文件名进行切割:

    >>> os.path.splitext("a.txt")

    ('a', '.txt')

     

    实质上还是对字符串在进行操作,对文件名本身是没有任何影响的。

     

    也可以用下面的方法进行文件和目录的分离:

    >>> os.path.dirname("e:\test1\a.txt")

    'e:\test1'

    >>> os.path.basename("e:\test1\a.txt")

    'a.txt'

    >>> os.path.basename(r"e: est1a.txt")

    'a.txt'

    不写两个\时就要在前面加r

     

    1. 判断是否为绝对路径

    #encoding=utf-8
    import os
    print os.path.isabs(r'd:gloryroada.py')
    print os.path.isabs(r'a.py') 

     

    1. 获取文件大小

    import os
    print os.path.getsize("d:\gloryroad\a.py")

    print os.path.getsize("e:\a.py")

     

     

     

    统计目录的大小结果是不可信的。

    统计文件是可用的。

     

    1. 拼接路径

    import os
    print os.path.join('c:\aa', 'test', 'a.txt')

    1. 拆分驱动器和文件路径

    #encoding=utf-8
    import os
    >>> print os.path.splitdrive("e:\test1\a.txt")

    ('e:', '\test1\a.txt')

     

    1. 查询操作时间

    >>> os.path.getctime("e:\b.py")  创建时间creat
    1485680291.1242003
    >>> os.path.getmtime("e:\b.py")  最近修改时间modify
    1503212560.4156132
    >>> os.path.getatime("e:\b.py")   最近访问时间access
    1495725806.1386025

     

     

     

     

    1. 终止当前进程:sys.exit(0)
      sys.exit(1) 非正常退出 

     

     

    1. 参数传入

    #encoding=utf-8
    #encoding=utf-8
    import sys

    for i in sys.argv:
        print i
        if i =="--help":
            print "gloyrorad system help info:xxxxx"

     

    练习:累加

    #encoding=utf-8
    #encoding=utf-8
    import sys

    def sum(*arg):
        result=0
        for i in arg[1:]:   从1开始切片是为了找到1 2 3,排除程序名称
            result+=int(i)
        return result

    print sum(*sys.argv)  *表示拆包

    **表示拆字典

     

    1. 传参例子

    # -*- coding: utf-8 -*- #

    import os

    import sys

     

    def readfile(filename):

        '''Print a file to the standard output.'''

        f = file(filename)

        while True:

              line = f.readline()

              if len(line) == 0:

                 break

              print line,

        f.close()

     

    #print "sys.argv[0]---------",sys.argv[0]                              

          

    #print "sys.argv[1]---------",sys.argv[1]                              

          

    #print "sys.argv[2]---------",sys.argv[2]

    # Script starts from here

    if len(sys.argv) < 2:

        print 'No action specified.'

        sys.exit()

     

    if sys.argv[1].startswith('--'):

       option = sys.argv[1][2:]

       # fetch sys.argv[1] but without the first two characters

       if option == 'version':

          print 'Version 1.2'

       elif option == 'help':

          print '''"

               This program prints files to the standard output.

               Any number of files can be specified.

               Options include:

               --version : Prints the version number

               --help    : Display this help'''

       else:

           print 'Unknown option.'

           sys.exit()

    else:

        for filename in sys.argv[1:]:

            readfile(filename)

    sys.exit()

     

    1. 标准输入

    #encoding=utf-8

    import sys

     

    counter = 1 

    while True: 

            line = sys.stdin.readline() 

            if not line.strip():  有回车时会终止循环输入

                    break 

            print "%s:%s" % (counter,line) 

            counter += 1

     

     

    1. 系统一般会提供标准输入,标准输出,标准错误输出。
    2. 复制操作

    >>> import shutil

    >>> shutil.copyfile("e:\a.py","e:\test1\xx.txt")

    >>> shutil.copytree("e:\test1","e:\test11")

    >>> shutil.move("e:\a.py","e://test1\x.py")

     shutil.rmtree("e:\test5") 

     

    >>> dir(shutil)查询

  • 相关阅读:
    EOS 数据库RAM使用量的计算
    EOS require_auth函数
    EOS测试链智能合约部署调用
    安装EOS合约工具eosio.cdt
    Linux Ubuntu下搭建Flutter桌面环境
    VMware虚拟机与物理机共享文件的方法总结
    虚拟机macOS Mojave10.14安装XCode10.1
    VMware14 安装 macOS Mojave教程
    VMware 14安装OS X10.11
    Mac OS虚拟机安装VMware Tools的方法
  • 原文地址:https://www.cnblogs.com/qingqing-919/p/8620348.html
Copyright © 2011-2022 走看看