操作文件和目录
操作文件、目录,可以通过操作系统提供的命令来完成。比如dir、cp 等命令
如果要在Python程序中执行目录和文件的操作,可以通过调用操作系统提供的接口函数
Python 内置的 os 模块也可以直接调用操作系统提供的接口函数。
os 模块的基本功能:
import os
print(os.name) #输出操作系统的类型
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
nt
Process finished with exit code 0
如果是 nt ,说明系统是Windows, 如果是 posix, 说明系统是Linux、Unix 或 Mac OS X
环境变量
查看系统的环境变量
import os
print(os.environ)
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'ANDROID_HOME': 'D:\\Local\\Android', 'APPDATA':...
Process finished with exit code 0
获取某个环境变量的值
1、
import os
print(os.environ.get('PATH'))
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Win....
Process finished with exit code 0
2、
import os
print(os.environ.get('x', 'default'))
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
default
Process finished with exit code 0
操作文件和目录
查看当前目录的绝对路径:
import os
print(os.path.abspath('.'))
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
E:\pyplace\learn_python3\learn\two\IO编程
Process finished with exit code 0
在某个目录下创建一个新目录,首先把新目录完整路径表示出来:
print(os.path.join('E:\\pyplace\\learn_python3\\learn\\two\\IO编程', 'testdir'))
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
E:\pyplace\learn_python3\learn\two\IO编程\testdir
Process finished with exit code 0
创建一个新目录:
import os
os.mkdir('E:\\pyplace\\learn_python3\\learn\\two\\IO编程\\testdir')
运行结果:在对应的目录下会有 testdir 文件产生
删除一个目录:
import os
os.rmdir('E:\\pyplace\\learn_python3\\learn\\two\\IO编程\\testdir')
运行结果:在对应的目录下 testdir 文件被删除了
把两个路径合成一个时,不要直接拼接字符串,而要通过 os.path.join() 函数,这样可以
正确的处理不同操作系统的路径分隔符。
在 Linux/Unix/Mac 下,os.path.join() 返的字符串:
part1/part2
而 Windows 下会返回这个样的字符串:
part1\part2
拼接:
import os
print(os.path.join('part1','part2'))
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
nt
part1\part2
Process finished with exit code 0
也就是说他们的格式是不一样的,所以最好用函数进行拼接。拆分也是一样的道理,拆分使用 os.path.split() 函数,把一个路径拆分为
两部分,后一部分总是最后级别的目录或文件名:
拆分:
import os
print(os.path.split('/users/michael/testdir/file.txt'))
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
nt
('/users/michael/testdir', 'file.txt')
Process finished with exit code 0
拆分直接得到扩展名:
import os
print(os.path.splitext('/path/to/file.txt'))
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
nt
('/path/to/file', '.txt')
Process finished with exit code 0
文件操作
重命名:
import os
os.rename('test.txt', 'test.py')
运行结果:test.txt 变为 test.py
删除:
import os
os.remove('test.py')
运行结果:test.py 被删除
获取当前目录下所有的文件:
import os
print([x for x in os.listdir('.') if os.path.isfile(x)])
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
nt
['bytesio.py', 'dir.py', 'StringIO 和 BytesIO.md', 'stringio.py', 'test.txt', 'with_file.py', '操作文件和目录.md', '文件读写.md']
Process finished with exit code 0
只获取.py为后缀的文件:
import os
print([x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py'])
运行结果:
E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/IO编程/dir.py
nt
['bytesio.py', 'dir.py', 'stringio.py', 'with_file.py']
Process finished with exit code 0
总结:
- 1、OS 模块可以直接调用系统的接口函数进行文件和目录的操作
- 2、合成或者拆分路径最好通过函数,这样避免不同环境导致的差异
- 3、通过函数快速的进行文件的查找过滤