8.2 文件系统:介绍一个高大上的东西
Python自身带有很多使用的模块。
比如random模块的randint()函数生成随机数,不能直接调用,要引入。
import random
random.randint(0,9)
========================================================
OS模块,就是Operating System的缩写,意思是操作系统,平时说的ios是指
iPhone OS的意思,苹果操作系统。
Python是跨平台语言,同样代码在不同的操作系统不需要修改代码。
有了OS模块,不需要关系系统,OS模块会帮我们选择合适的模块并且调用。
---------------------------------------------------------------------------
表8-3 OS模块中关于 文件/目录 常用的函数使用方法
getcwd()返回当前工作目录
chdir(path)改变工作目录
listdir(path=".")列举指定目录的文件名("."表示当前目录,".."表示上一级目录)
-------------------------------
mkdir(path)创建单层目录,如果存在则抛出异常
makedirs(path)递归创建多层目录,目录存抛异,注意"E:\\a\\b"和"E:\\a\\c"不冲突
-----------------------------------
remove(path)删除文件
--------------------------------------
rmdir(path)删除单层目录,如果该目录非空则抛出异常
removedirs(path)递归删除目录,从子目录到父目录逐层尝试删除,遇到非空抛出异常
----------------------------------------
rename(ole,new)将文件ole重命名为new
----------------------------------------
system(command)运行系统shell命令
---------------------------------------------------------------------------
1.getcwd() 经常用来获取应用程序当前工作目录
import os
print(os.getcwd())
----------------------
C:\PycharmProjects\my1
2.chdir(path)改变当前工作目录,比如切换到E盘
import os
print(os.getcwd())
os.chdir("E:\\")
print(os.getcwd())
-------------------
C:\PycharmProjects\my1
E:\
3.listdir(path=".") 当前目录下的文件和子目录,列举出来。".."代表上层目录。
import os
print(os.chdir("E:\\迅雷下载\\"))
print(os.listdir(".."))
-----------------------------
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘u盘‘, ‘元旦会‘, ‘壁纸‘, ‘电影‘, ‘迅雷下载‘]
4.mkdir(path)创建文件夹,如果存在,报异常。
import os
os.chdir("E:\\")
os.mkdir("test")
print(os.listdir(‘.‘))
----------------------------
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘test‘, ‘u盘‘, ‘元旦会‘, ‘壁纸‘, ‘电影‘, ‘迅雷下载‘]
================再次运行程序,结果如下========================
Traceback (most recent call last):
File "C:/PycharmProjects/my1/t2.py", line 3, in <module>
os.mkdir("test")
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: ‘test‘
5.makedirs(path)创建多层目录 目录存在抛出异常
import os
os.chdir("E:\\")
os.makedirs(r".\a\b\c") # r".\a\b\e" 不抛出; r".\a\b"抛出异常
6.remove()删除指定的文件
rmdir(path)删除目录
removedirs()删除多层目录
===========开始我的表演========================
import os
os.chdir("E:\\")
print("起始情况:")
print(os.listdir())
print("创建工作:")
open(os.getcwd()+"test.txt","w")
os.mkdir("a")
os.makedirs(r".\b\c\d")
print(os.listdir())
print("删除工作:")
os.remove("test.txt")
os.rmdir("a")
os.removedirs(r".\b\c\d")
print(os.listdir())
--------------------------------------
起始情况:
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘u盘‘, ‘元旦会‘, ‘壁纸‘, ‘电影‘, ‘迅雷下载‘]
创建工作:
[‘$RECYCLE.BIN‘, ‘a‘, ‘b‘, ‘PCKii‘, ‘System Volume Information‘, ‘test.txt‘, ‘u盘‘, ‘元旦会‘, ‘壁纸‘, ‘电影‘, ‘迅雷下载‘]
删除工作:
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘u盘‘, ‘元旦会‘, ‘壁纸‘, ‘电影‘, ‘迅雷下载‘]
7.rename(old,new) 重命名文件或者文件名
import os
os.chdir(r"E:\test")
print(os.listdir())
os.rename("a","b")
os.rename("tanke.txt","plane.txt")
print(os.listdir())
---------------------------
[‘a‘, ‘tanke.txt‘]
[‘b‘, ‘plane.txt‘]
========================================
8.system(command)每个操作系统都会提供一些小工具,用于调用。
os.system("calc") 调用系统的计算器
9.walk(top)有时候非常有用,遍历top参数制定路径下的素有子目录,并且返回一个
三元组(路径,[包含目录],[包含文件])
代码如下
import os
os.chdir("E:\\")
for i in os.walk("test"):
print(i)
--------------------------------
(‘test‘, [‘bin‘, ‘obj‘], [‘20fdgfdgfd.ico‘, ‘chinaz4.ico‘])
(‘test\\bin‘, [‘Debug‘], [])
(‘test\\bin\\Debug‘, [‘app.publish‘], [‘捣蛋头-电话骚扰器.exe‘, ‘捣蛋头-电话骚扰器.exe.manifest‘])
(‘test\\bin\\Debug\\app.publish‘, [‘Application Files‘], [‘setup.exe‘, ‘WindowsFormsApplication14.application‘])
(‘test\\bin\\Debug\\app.publish\\Application Files‘, [‘WindowsFormsApplication14_1_2_4_2‘], [])
(‘test\\bin\\Debug\\app.publish\\Application Files\\WindowsFormsApplication14_1_2_4_2‘, [], [‘20fdgfdgfd.ico.deploy‘, ‘chinaz4.ico.deploy‘])
(‘test\\obj‘, [‘x86‘], [])
(‘test\\obj\\x86‘, [‘Debug‘], [])
(‘test\\obj\\x86\\Debug‘, [‘TempPE‘], [‘DesignTimeResolveAssemblyReferences.cache‘, ‘DesignTimeResolveAssemblyReferencesInput.cache‘, ‘GenerateResource.read.1.tlog‘, ‘GenerateResource.write.1.tlog‘])
(‘test\\obj\\x86\\Debug\\TempPE‘, [], [])
=============================================================
另外,path模块还提供了一些实用的定义,分别是:
os.curdir 表示当前目录
os.pardir 表示上一级目录("..")
os.sep 表示路径的分隔符 windows系统为"\\" 而Linux为"/"
os.linesep 表示当前平台使用的行终止符 windows系统为"\r\n" 而Linux为"\n"
os.name 表示当前使用的操作系统 Windows 返回 ‘nt‘; Linux 返回’posix‘。
=============================================================================
另一个强大的【模块是os.path】,它可以完成一些针对路径名的操作,如表所示【略】
列举几个,介绍如下:
10.basename(path)和dirname(path)分别用于获取文件名和路径名,举例
import os
print(os.path.dirname(r"a\b\test.txt"))
print(os.path.basename(r"a\b\test.txt"))
--------------------------------------------
a\b
test.txt
=============================
11.join(path1,path2)与BIF的那个join()不同,os.path.join()用于路径和文件名组合
成为完整路径。
import os
k=os.path.join(r"C:\Python37\Test","FishC.txt")
print(k)
------------------
C:\Python37\Test\FishC.txt
===========================================================
12.split(path)和splitext(path) 都是用于分割路径。
第一个比较盲目,如果全是目录,就会把最后一个目录当文件名,第二个高级智能一些。
示例如下:
import os
a=os.path.split("C:\Python37\Test\FishC.txt")
b=os.path.splitext("C:\Python37\Test\FishC.txt")
c=os.path.split("C:\Python37\Test")
print(a)
print(b)
print(c)
-----------------------------------------------------
(‘C:\\Python37\\Test‘, ‘FishC.txt‘)
(‘C:\\Python37\\Test\\FishC‘, ‘.txt‘)
(‘C:\\Python37‘, ‘Test‘)
13.getsize(file) 返回文件的大小,字节为单位
import os
os.chdir(r"D:\360Downloads\Software")
print(os.path.getsize("360.exe"))
-------------------------------
11912512
===========================
14.getatime(file),getctime(file)和getmtime(file)
最近访问时间-----创建时间-----修改时间
不过返回的是浮点型秒数,用time模块的gmtime()或localtime()换算。
示例代码如下:
import time
import os
os.chdir(r"D:\360Downloads\Software")
temp=time.localtime(os.path.getatime("360.exe"))
print("文件被访问的时间是:",time.strftime("Y% %b %d %H:%M:%S",temp))
------------------------------------------------------------------
文件被访问的时间是: 2019 Feb 05 21:28:43
----------------个人小结-----------------------
import time
import os
print(time.strftime("%Y%b%d %H:%M:%S",time.localtime(time.time())))
先是由time.time()得到当前时间的浮点值
再由time.localtime()进行元组整理
最后由time.strftime()格式化展示出来
==========================================================================
================================= pickle 腌制美味泡菜 ====================
1 从文件读取字符串很简单,但是要读取数值,就要多费周折。
无论read()还是readline()方法,返回的都是一个字符串,如果要从字符串中提取数值,
可以使用int()或者float()把类似“123”或者“3.14”的字符串强制转化。
2 以前保存文本容易,但是要保存的数据如列表,字典甚至是类的实例这些更复杂的数据类型,
普通文件操作就不知所措了,也许你会把他们全部转换为字符串,再写入文本进行保存,但
是,要把这个过程反过来,文本恢复数据到对象,那就异常麻烦了。
所以,模块出现了,这个就是pickle模块。
========================== pickle模块 =========================
import pickle
my = [123, 3.14, "导弹头", ["其它列表"]]
f = open(r"C:\Users\Daodantou\Desktop\ri.bo", "wb")
pickle.dump(my,f) #拿泡菜罐 放入东西 压紧保存
f.close()
-------------------------------已经保存,但是打开是乱码------------------
import pickle
e = open("C:\\Users\\Daodantou\\Desktop\\ri.bo", "rb")
my1 = pickle.load(e) #取出泡菜
print(my1)
e.close()
------------------------------正常读取文件到程序-------------------------
原文地址:https://www.cnblogs.com/daodantou/p/10357899.html