文件与文件路径
>>> import os
>>> os.makedirs(os.path.join('E:\\','path','pythonTest'))##创建 E:\\path\\pythonTest 文件夹
>>> os.path.abspath('.')## 当前目录的绝对路径
'D:\\work\\Python\\Python36'
>>> os.path.abspath('.\\abc')## 当前目录下abc文件夹的绝对路径
'D:\\work\\Python\\Python36\\abc'
>>> os.path.abspath('abc')## 与上面等同
'D:\\work\\Python\\Python36\\abc'
>>> os.getcwd()## 当前路径
'D:\\work\\Python\\Python36'
>>> os.chdir(os.path.join('E:\\','python','project'))## 修改当前路径
>>> os.path.abspath('.')## 当前路径的绝对地址
'E:\\python\\project'
>>> os.path.abspath('..')## ..表示返回上一级
'E:\\python'
>>> os.path.isabs('.')## 判断是否为绝对路径, . 是相对路径
False
>>> os.path.isabs(os.path.abspath('.'))## 直接获取绝对路径做判断
True
>>> os.path.relpath(os.getcwd(),'D:\\')## D盘到当前目录的相对地址
Traceback (most recent call last):
File "", line 1, in os.path.relpath(os.getcwd(),'D:\\')
File "D:\work\Python\Python36\lib\ntpath.py", line 585, in relpath
path_drive, start_drive))
ValueError: path is on mount 'E:', start on mount 'D:'## 上面已将当前路径改为 'E:\\python\\project' 当前路径不能跨盘符
## 获取相对路径可以理解为第二个路径如何到达第一个路径
>>> os.path.relpath(os.getcwd(),'e:\\')## e:\\需要进 python\\project 可以到 E:\\python\\project
'python\\project'
>>> os.path.relpath(os.getcwd(),'e:\\sources')## e:\\sources 先 .. 后退到 e: ,然后 \\python\\project 到 E:\\python\\project
'..\\python\\project'
>>> os.path.relpath(os.getcwd(),'e:\\abcdefg')## e:\\abcdefg 这个路径不存在,但不影响获取相对地址
'..\\python\\project'
目录名称与基本名称
>>> path=os.path.join('E:\\','path','pythonTest','abc.txt')
>>> os.path.basename(path)## 基本名称
'abc.txt'
>>> os.path.dirname(path)## 目录名称
'E:\\path\\pythonTest'
>>> os.path.split(path)## 同时获取目录名称与基本名称的元组
('E:\\path\\pythonTest', 'abc.txt')
>>> os.path.dirname(path),os.path.basename(path)## 等同于上面
('E:\\path\\pythonTest', 'abc.txt')
>>> path.split(os.path.sep)## 返回所有目录层级
['E:', 'path', 'pythonTest', 'abc.txt']
查看文件大小和文件夹内容
>>> os.path.getsize(os.path.join('E:\\','path','pythonTest','abc.txt'))
84
>>> os.path.getsize(os.path.join('E:\\','path','pythonTest'))## E:\\path\\pythonTest 是一个文件夹,不会读取文件夹里面内容
0
>>> os.listdir(os.path.join('E:\\','bugs'))## 查看 E:\\bugs 目录下所有文件及文件夹,返回一个列表
['images', 'index.html', 'layui', 'prism.css', 'prism.js', 'res']
## 统计 E:\\path 这层目录下的文件大小
>>> totalSize=0
>>> for filename in os.listdir(os.path.join('E:\\','path')):
totalSize+=os.path.getsize(os.path.join('E:\\','path',filename))
>>> print(totalSize)
164
>>> os.path.exists(os.path.join('E:\\'))## 判断路径是否存在
True
>>> os.path.exists(os.path.join('E:\\','path','abc.txt'))## 也可以判断文件是否存在
True
>>> os.path.exists(os.path.join('E:\\','abc'))## 不存在 E:\\abc 文件夹
False
>>> os.path.isfile(os.path.join('E:\\','path','pythonTest','abc.txt'))## 判断路径是否为文件
True
>>> os.path.isdir(os.path.join('E:\\','path','pythonTest','abc.txt'))## 判断路径是否为目录
False
>>> os.path.isdir(os.path.join('E:\\','path','pythonT'))## 不存在 pythonT
False
>>> os.path.isdir(os.path.join('E:\\','path','pythonTest'))
True
## 统计 E:\\path 下所有文件及文件夹内所有文件大小
import os
totalSize=0
def totalFile(path):
global totalSize## 全局变量,计算总和
for file in os.listdir(path):## 循环目录下所有文件及文件夹
fdPath=os.path.join(path,file)## 获取地址:1.文件;2.文件夹
if os.path.isdir(fdPath):## 判断地址是否为文件夹
totalFile(fdPath)## 如果是文件夹,递归目录内文件(夹)
elif os.path.isfile(fdPath):## 判断地址是否为文件
totalSize+=os.path.getsize(fdPath)## 是文件则获取大小,统计
totalFile(os.path.join('E:\\','path'))
print(totalSize)
文件读写
>>> file=open(os.path.join('E:\\','path','abc.txt'))
>>> file.read()## 一次性读取文件 abc.txt 内容,每行间隔 \n
'胜利大街弗兰克斯较多发\nlsjdfkls拉克丝\n胜利大街弗兰克斯减肥的\n老师的减肥了开始放大'
>>> file.readline()
''
>>> file.readline()
''
>>> file.readlines()
[]
>>> file.read()## 内容被一次读取,后面无法再读取到内容
''
>>> file.close()## 关闭
>>> file=open(os.path.join('E:\\','path','abc.txt'))
>>> file.readline()## 读取一行数据
'胜利大街弗兰克斯较多发\n'
>>> file.readline()
'lsjdfkls拉克丝\n'
>>> file.readline()
'胜利大街弗兰克斯减肥的\n'
>>> file.readlines()
['老师的减肥了开始放大']
>>> file.close()
>>> file=open(os.path.join('E:\\',))
Traceback (most recent call last):
File "", line 1, in file=open(os.path.join('E:\\',))
FileNotFoundError: [Errno 2] No such file or directory: 'E:\\'
>>> file=open(os.path.join('E:\\','path','abc.txt'),'w')## 向文件内写数据, w 模式代表覆盖写入
>>> file.write('abc')
3
>>> file.close()
>>> file=open(os.path.join('E:\\','path','abc.txt'),'a')## a 模式代表追加,不会覆盖原内容
>>> file.write('efg')
3
>>> file.writelines('wyt')## writelines并不会在文件中换行,换行需要在后面加 \n
>>> file.close()
>>> type(file)
>>> file=open(os.path.join('E:\\','path','abc.txt'),'w')
>>> type(file)
用 shelve 模块保存变量
用 shelve 模块,可以将 Python 程序中的变量保存到二进制的 shelf 文件中。这样,程序就可以从硬盘中恢复变量的数据。
>>> import shelve
>>> shelFile=shelve.open(os.path.join('E:\\','path','mydata'))
>>> abc=['a','b','c']
>>> shelFile['abc']=abc
>>> shelFile.close()
>>> shelFile=shelve.open(os.path.join('E:\\','path','mydata'))
>>> shelFile['abc']
['a', 'b', 'c']
>>> list(shelFile.keys()),list(shelFile.values())
(['abc'], [['a', 'b', 'c']])
>>> efg=('e','f','g')
>>> shelFile['efg']=efg
>>> shelFile.close()
>>> shelFile=shelve.open(os.path.join('E:\\','path','mydata'))
>>> shelFile['abc']
['a', 'b', 'c']
>>> shelFile['efg']
('e', 'f', 'g')