python文件操作模块
open()打开方式
文本文件的写入一般就是三个步骤:
- 创建文件对象
- 写入数据
- 关闭文件对象
f = open(r"a.txt","a")
s = "itbaizhan\nsxt\n"
f.write(s)
f.close()
close()关闭文件流
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用 close()方法
关闭文件对象。当调用 close()方法时,首先会把缓冲区数据写入文件(也可以直接调用 flush()方法),再关闭文件,释放文件对象。
为了确保打开的文件对象正常关闭,一般结合异常机制的 finally
或者 with
关键字实现.无论何种情况都能关闭打开的文件对象。
with 语句(上下文管理器)
s = ["高1\n","高2\n","高3\n"]
with open(r"d:\bb.txt","w") as f:
f.writelines(s)
文本文件的读取
文件的读取一般使用如下三个方法:
- read([size])
从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。
读取到文件末尾,会返回空字符串。 - readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。 - readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表
二进制文件的读取和写入
with open('aa.gif', 'rb') as f:
with open('aa_copy.gif', 'wb') as w:
for line in f.readlines():
w.write(line)
print('图片拷贝完成!')
pickle 序列化
序列化我们使用:
pickle.dump(obj, file)
obj 就是要被序列化的对象,file 指的是存储的文件
pickle.load(file)
从 file 读取数据,反序列化成对象
CSV文件操作
CSV读取
import csv
with open(r"d:\a.csv") as a:
a_csv = csv.reader(a)#创建 csv 对象,它是一个包含所有数据的列表,每一行为一个元素
headers = next(a_csv)#获得列表对象,包含标题行的信息
print(headers)
for row in a_csv:#循环打印各行内容
print(row)
CSV写入
import csv
headers = ["工号","姓名","年龄","地址","月薪"]
rows = [("1001","高淇",18,"西三旗 1 号院","50000"),("1002","高八",19,"西三旗 1 号院","30000")]
with open(r"d:\b.csv","w") as b:
b_csv = csv.writer(b)#创建 csv 对象
b_csv.writerow(headers)#写入一行(标题)
b_csv.writerows(rows)#写入多行(数据)
OS模块
OS操作系统操作
import os
os.system("ping www.baidu.com")
OS文件操作
OS目录操作
#测试 os.path 常用方法
import os
import os.path
#################获得目录、文件基本信息
######################
print(os.path.isabs("d:/a.txt"))#是否绝对路径
print(os.path.isdir("d:/a.txt"))#是否目录
print(os.path.isfile("d:/a.txt"))#是否文件
print(os.path.exists("a.txt"))#文件是否存在
print(os.path.getsize("a.txt"))#文件大小
print(os.path.abspath("a.txt"))#输出绝对路径
print(os.path.dirname("d:/a.txt"))#输出所在目录
########获得创建时间、访问时间、最后修改时间##########
print(os.path.getctime("a.txt"))#返回创建时间
print(os.path.getatime("a.txt"))#返回最后访问时间
print(os.path.getmtime("a.txt"))#返回最后修改时间
################对路径进行分割、连接操作####################
path = os.path.abspath("a.txt")#返回绝对路径
print(os.path.split(path))#返回元组:目录、文件
(输出:'C:\\Users\\Administrator\\PycharmProjects\\mypro_io\\test_os', 'a.txt')
print(os.path.splitext(path))#返回元组:路径、扩展名
(输出:'C:\\Users\\Administrator\\PycharmProjects\\mypro_io\\test_os\\a',
'.txt')
print(os.path.join("aa","bb","cc")) #返回路径:aa/bb/cc
walk遍历
#coding=utf-8
import os
all_files = []
path = os.getcwd()
list_files = os.walk(path)
for dirpath,dirnames,filenames in list_files:
for dir in dirnames:
all_files.append(os.path.join(dirpath,dir))
for name in filenames:
all_files.append(os.path.join(dirpath,name))#打印子目录和子文件
for file in all_files:
print(file)
shutil模块
import shutil
#copy 文件内容
shutil.copyfile("1.txt","1_copy.txt")
import shutil
import zipfile #解压缩:
z2 = zipfile.ZipFile("a.zip","r")
z2.extractall("d:/") #设置解压的地址
z2.close()
递归算法
递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。
递归结构包括两个部分:
- 定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
- 递归体。解答:什么时候需要调用自身方法。
#coding=utf-8
#测试递归
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
a = factorial(10)
print(a)
递归遍历目录
import os
allfile = []
def getFiles(path,level):
childFiles = os.listdir(path)
for file in childFiles:
filepath = os.path.join(path,file)
if os.path.isdir(filepath):
getFiles(filepath,level+1)
allfile.append("\t"*level+filepath)
getFiles(os.getcwd(),0)