os模块

os模块

一、os模块

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口,多用于文件处理。

作用 os模块: 与操作系统交互, 可以操控文件

import os
  1. 获取当前文件目录

    获取当前文件目录(打印不包含文件本身只会打印目录)
    print(os.getcwd())
    
  2. 创建文件夹

    # 创建一个文件夹(还可以实现创建文件如果不存在)
    os.mkdir('test')
    
  3. 删除文件夹

    os.rmdir('test')
    
  4. 列出所有文件

    # 列出当前文件所在目录中的所有文件(经常用到)
    res = os.listdir(r"G:\python学习\模块")
    print(res) # 返回一个列表
    
    
  5. 重命名

    #对文件进行重命名
    os.rename('user.py', 'test.py')
    
  6. 删除文件

    os.remove('test.py')
    
  7. __file__

    # 只有pychamr才提供,python本身不支持
    # 打印当前文件所在的目录,会包含文件本身
    print('__file__:', __file__)
    

    结果:

    G:/python学习/python基础/os模块.py

  8. os.path.abspath()

# 1. 支持不同平台的文件路径会打印当前文件的目录包含文件(并且使用各个平台的文件表示路径)(windows,ios,andirod,linux,unix)

# 2. 返回当前文件所在的目录包含本身文件(绝对路径)
print(os.path.abspath(__file__))

结果:

G:\python学习\python基础\day017\os模块.py

  1. os.path.dirname()
# 打印当前文件所在的目录,不会包含所在的文件,但是路径只会适用当前系统
print(os.path.dirname(__file__))
  1. os.path.abspath()和 os.path.dirname()一起连用很重要
``` python
# os.path.dirname会把最后一个目录或文件去除
print(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
```

结果:

G:\python学习\python基础\os模块.py
G:\python学习\python基础
  1. os.path.join拼接字符串路径

    # 支持不同的平台(windows,ios,andirod,linux,unix),进行对路径拼接
    res = os.path.join(r'G:/python学习/python基础/os模块', 'test2.py')
    

    结果:

    G:/python学习/python基础/os模块\test2.py

  2. 判断文件夹是否存在os.path.exists

    # 判断文件是否存在,存在返回True,不存在返回False
    print(os.path.exists('test.py'))
    
  3. 判断文件是否是文件

    # 判断文件是否为文件
    print(os.path.isfile('test.py'))
    
  4. 判断是否是文件名

    # 判断文件是否是文件夹
    print(os.path.isdir('test.py'))
    
  5. 判断是否是文件夹

    print(os.path.isdir('test.py'))
    
  6. 循环遍历问价

    import os
    # g为迭代对象
    # 返回三个值,第一个值是路径;第二个值是路径下的文件夹,第三个值是路径下的文件
    g = os.walk(r"G:/python学习/python基础/day017")
    for i in g:
        print(i)
    
     
     



|                方法                 |                             详解                             |
| :---------------------------------: | :----------------------------------------------------------: |
|             os.getcwd()             |       获取当前工作目录,即当前python脚本工作的目录路径       |
|         os.chdir("dirname")         |            改变当前脚本工作目录;相当于shell下cd             |
|              os.curdir              |                     返回当前目录: ('.')                      |
|              os.pardir              |             获取当前目录的父目录字符串名:('..')             |
|  os.makedirs('dirname1/dirname2')   |                      可生成多层递归目录                      |
|      os.removedirs('dirname1')      | 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 |
|         os.mkdir('dirname')         |           生成单级目录;相当于shell中mkdir dirname           |
|         os.rmdir('dirname')         | 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname |
|        os.listdir('dirname')        | 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 |
|             os.remove()             |                         删除一个文件                         |
|   os.rename("oldname","newname")    |                       重命名文件/目录                        |
|      os.stat('path/filename')       |                      获取文件/目录信息                       |
|               os.sep                |    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"     |
|             os.linesep              |   输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"    |
|             os.pathsep              |       输出用于分割文件路径的字符串 win下为;,Linux下为:       |
|               os.name               |    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'     |
|      os.system("bash command")      |                   运行shell命令,直接显示                    |
|             os.environ              |                       获取系统环境变量                       |
|        os.path.abspath(path)        |                   返回path规范化的绝对路径                   |
|         os.path.split(path)         |              将path分割成目录和文件名二元组返回              |
|        os.path.dirname(path)        |   返回path的目录。其实就是os.path.split(path)的第一个元素    |
|       os.path.basename(path)        | 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 |
|        os.path.exists(path)         |      如果path存在,返回True;如果path不存在,返回False       |
|         os.path.isabs(path)         |                 如果path是绝对路径,返回True                 |
|        os.path.isfile(path)         |      如果path是一个存在的文件,返回True。否则返回False       |
|         os.path.isdir(path)         |     如果path是一个存在的目录,则返回True。否则返回False      |
| os.path.join(path1[, path2[, ...]]) |    将多个路径组合后返回,第一个绝对路径之前的参数将被忽略    |
|       os.path.getatime(path)        |          返回path所指向的文件或者目录的最后存取时间          |
|       os.path.getmtime(path)        |          返回path所指向的文件或者目录的最后修改时间          |

os.path.getsize(path) 返回path的大小



## 二、统计代码行数

``` python
import os


def count_code(path):  # path == 'D:'
    count = 0
    flag = True

    if os.path.isdir(path):
        for dir, _, file_path_list in os.walk(path):
            for file_path in file_path_list:
                try:
                    file_path = os.path.join(dir, file_path)
                    path_list = file_path.split('.')
                    file_count = 0
                    if path_list[-1] == 'py':
                        with open(file_path, 'r', encoding='utf8') as fr:
                            for line in fr:
                                if (line.startswith('\'\'\'') or line.startswith('\"\"\"')) and flag:
                                    flag = False
                                    continue
                                elif ('=' in line and ('\'\'\'' in line or '\"\"\"' in line)) and flag:
                                    flag = False
                                    continue
                                elif (line.startswith('\'\'\'') or line.startswith('\"\"\"')) and not flag:
                                    flag = True
                                    continue

                                if line.startswith('#') and flag:
                                    continue
                                elif line == '\n' and flag:
                                    continue
                                elif flag:
                                    count += 1
                                    file_count += 1
                    print(f'{file_path}有{file_count}行')
                except Exception:
                    print(f'该文件{file_path}有问题')
                    continue

    elif os.path.isfile(path):
        path_list = path.split('.')
        if path_list[-1] == 'py':
            file_count = 0
            with open(path, 'r', encoding='utf8') as fr:
                for line in fr:
                    if (line.startswith('\'\'\'') or line.startswith('\"\"\"')) and flag:
                        flag = False
                        continue
                    elif ('=' in line and ('\'\'\'' in line or '\"\"\"' in line)) and flag:
                        flag = False
                        continue
                    elif (line.startswith('\'\'\'') or line.startswith('\"\"\"')) and not flag:
                        flag = True
                        continue
                    if line.startswith('#') and flag:
                        continue
                    elif line == '\n' and flag:
                        continue
                    elif flag:
                        count += 1
                        file_count += 1
            print(f'{path}有{file_count}行')
        else:
            print('不是py文件')

    return count


if __name__ == '__main__':
    # file_path = sys.argv[1]
    # count = count_code(file_path)
    count = count_code(r'G:\python学习\python基础\07 模块')
    print(count)

posted @ 2019-08-17 12:08  RandySun  阅读(189)  评论(0编辑  收藏  举报