文件操作技术基本用法

1. 文本文件和二进制文件:

  • 文本文件:存储普通字符文本,默认为unicode字符集(两个字节表示一个字符)最多可以表示 65536个
  • 二进制文件:内容用“字节”进行存储,无法用记事本打开,常见的有:视频、音频、图片、DOC文件

2.文件操作相关模块

  • io 文件流的输入输出
  • os 基本操作系统功能
  • glob 查找符合特定规则的文件路径名
  • fnmatch 使用模式来匹配文件的路径名
  • fileinput 处理多个输入文件
  • filecmp 用于文件比较
  • cvs 用于cvs文件处理
  • pickle & cPickle 用于序列化和反序列化
  • xml 用于XML数据处理
  • bz2 gzip zipfile zlib tarfile 用于处理压缩和解压缩文件 分别对应不同的算法

3.创建文件对象

open(): open(filename [,openmodel]) : f = open(r “d:\b.txt”, “a”)

如果只是文件名,则代表在当前目录下的文件;文件名可以录入全路径;r 则减少\的输入

  • 打开方式:
    • r 读模式
    • w 写模式 如果文件不存在则创建,若存在,则重新读写内容
    • a 追加模式 append 文件不存在则自动创建
    • b 二进制模式 binary 没写b 则默认为文本文件
    • + 读写模式

4.常见编码方式

  • ASCII 7位 只能表示128个字符
  • SIO8859-1 8位表示1字符,能表示256个字符,兼容ASCII
  • GBK GB2312 GB18030 国标 汉字2字节
  • Unicode 定长编码,2字节表示一个字符 python默认使用的编码形式
  • UTF-8 变长编码 1-4个字节表示一个字符 英文一个字节,汉字3个字节

5.文件的写入步骤

  1. 创建文件对象
  2. 写入数据
  3. 关闭文件对象

一共有三种比较常见的方式,记录如下:

filename = "my01.txt"
f = open(filename,'w', encoding='UTF-8')
s = "OLG\nHello\n小可爱\n"
f.write(s)
f.close() # 关闭文件流
try:
    f = open(r"test/my02.txt","a") # 先写入缓存区
    str = "hello,my02"
    f.write(str) #再将内容写入文件
except BaseException as e:
    print(e)
finally:
    f.close()
# with语句 上下文管理器:自动管理上下文资源,不管什么原因跳出with块,都能确保文件正常关闭:
s = ["小可爱\n","hello\n"]
with open(r"my03.txt","a",encoding="UTF-8") as f:
    f.writelines(s) #逐行写入

6.文件的读取

  • read([size]) 从文件中读取size个字符串,并作为结果返回。如果没有size,则读取整个文件至末尾,会返回空字符串
  • readline() 读取一行作为结果返回。读取到文件末尾,会返回空字符串
  • readlines() 文本文件中,每一行作为一个字符串存入列表中,返回该列表
with open("test/my01.txt",'r',encoding='UTF-8') as f:
    for a in f:
        print(a,end=" ")

注:enumerate() 添加序号

a = ['a\n','b\n','c\n']
b = enumerate(a)
print(a)
print(list(b)) #b:(0,‘cao’)。。。

# 读取行号
c = [temp.rstrip() + " # " + str(index) for index,temp in enumerate(a)] # .rstrip() 去分隔符\n
# print(c)

with open('caotest/my01.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    lines = [line.rstrip() + '#' + str(index) + '\n' for index,line in enumerate(lines)]
    print(lines)

7.二进制文件的读取与写入

  • file_mode = wb rb ab 其余内容相同

8.文件对象的常用属性和方法

  1. 属性:
  • name
  • mode
  • closed
  1. 打开模式:
  • r
  • w
  • a
  • b
  • +
  1. 文件对象常用方法:
  • read([size])

  • readline()

  • readlines()

  • write(str)

  • writelines(str) 不添加换行符

  • seek(offset[,whence]) 把文件指针移到新的位置,offset表示相对于whence的位置

    • offset:
      • off为正 往结束方向移动;为负 往开始方向移动
    • whence:
      • 0 从文件头开始
      • 1 从当前位置开始计算
      • 2 从文件尾开始计算
  • tell() 返回文件指针的当前位置

  • truncate(size) 无论在什么位置,只留下指针前size个字节的内容,其余全部删除

  • flush() 把缓冲区的内容写入文件,但不关闭文件

  • close() 把缓冲区的内容写入文件,同时关闭文件,释放相关资源

with open('caotest/my01.txt','r',encoding='utf-8') as f:
    print('filename:{0}'.format(f.name))
    print(f.tell()) #读取文件指针位置
    print('读取内容:{0}'.format(str(f.readline())))
    print(f.tell())
    f.seek(5) #改变文件的指针位置
    print('读取的内容:{0}'.format(str(f.readline())))

9.使用pickle序列化

python中,一切皆对象,本质是一个“存储数据的内存块”,

  • 序列化:将对象转换成“串行比”的数据形式,存储到硬盘或网络传输到其他地方
  • 反序列化:相反的过程,将读取到的“串行化数据”转换成对象
  • pickle().dump(obj,file) obj即是要被序列化的对象,file指的是存储的文件
  • pickle().load(file) 从file读取数据,反序列化成对象
# 序列化
with open(r'caotest/my07.txt','wb') as f:
    a1 = 'caoyh'
    a2 = 235
    a3 = [20,30,50]
    a4 = '小可爱'
    pickle.dump(a1,f)
    pickle.dump(a2, f)
    pickle.dump(a3, f)
    pickle.dump(a4,f)
# 反序列化
with open('test/my07.txt','rb') as f:
    for a in (a1,a2,a3,a4):
        a = pickle.load(f)
        print(a)

10.CSV文件的操作

  • csv是都好分隔符文本格式,常用于数据交换、
  • Excel文件和数据库数据的导出和导入
    与Excel文件不同,csv文件中
    • 值没有类型,所有值都是字符串
    • 不能指定字体颜色等样式
    • 不能指定单元格高宽,不能合并单元格
    • 没有多个工作表
    • 不能嵌入图像
      csv文件和excel文件的区别
import csv
with open('example-write.csv','r',encoding='utf-8') as f:
    a_csv = csv.reader(f)
    # print(a_csv)
    # print('*'*20)
    # print(list(a_csv))
    # print('*' * 20)
    for row in a_csv:
        print(row)

# csv文件写入
with open('example.csv','w') as f:
    b_csv = csv.writer(f)
    b_csv.writerow(["005","bb","18","1000"])

11.os与os.path模块

  • os.system() 直接调用系统命令 os.system(“notepad.exe”)
  • os.system() 调用window系统的ping命令 os.system(“ping www.baidu.com”)

os模块

在这里插入图片描述

import os
os.system('cmd')
# 直接打开应用
os.startfile(r'C:\Program Files (x86)\Sangfor\SSL\SangforCSClient.exe')

'''
获取文件和文件夹的相关信息
'''
print(os.name) # 返回操作系统的名字   window-->nt linux/unix-->posix
print(os.sep)  # 返回操作系统的分隔符 window-->\ linux unix-->/
print(repr(os.linesep))  # window-->\r\n linux unix-->\n\

print(os.stat('my01.txt')) # 获取文件信息

'''
创建目录,创建多级目录,删除目录
'''
#返回当前工作目录
print(os.getcwd())
#创建子目录
# os.mkdir("bookcaoyh")
#先指定目录,再创建子目录
os.chdir("D:/")
os.mkdir("caoyh")

'''
创建目录,创建多级目录,删除目录
'''
os.mkdir("小可爱") #创建目录
os.rmdir("cao") #删除目录
os.makedirs("cao/y/h") #创建多级目录
os.removedirs("cao/y/h") #删除多及目录 只能是空的才可以

os.makedirs("../cao/y") #../ 指的是上一级目录

os.rename("小可爱","cao") # 修改目录名字

dirs = os.listdir("caoyh") #列出一级子目录和子文件
print(dirs)

os.path模块

在这里插入图片描述

import os.path

#### 指的是相对路径
############判断:绝对路径、是否目录、是否文件、文件是否存在###################
print(os.path.isabs("d:/onedrive")) # True
print(os.path.isdir("d:/onedrive")) # True
print(os.path.isfile("d:/a.txt"))   # False
print(os.path.exists("d:/onedrive"))# True

############## 获取文件的基本信息 #############################
print(os.path.getsize("my01.txt")) #获得文件大小
print(os.path.abspath("my01.txt")) #获得文件的绝对路径
print(os.path.dirname("my01.txt")) #获得文件的相对路径

################ 路径的操作 ########################
path = os.path.abspath("my01.txt")
path2list = os.path.split(path)
print(path2list)

print(os.path.splitext(path))

print(os.path.join('caoyh','join'))

'''
练习指定目录下的所有.py文件,并输出文件名
'''
import os
path = os.getcwd()
file_list = os.listdir(path)
for filename in file_list:
    if filename.endswith("py"):
        print(filename,end='\t')

print('\n'+"*"*20)

file_list2 = [filename for filename in os.listdir(path) if filename.endswith(".py")]
for f in file_list2:
    print(f,end='\t')

os.walk() 递归遍历所有文件

在这里插入图片描述

'''
测试os.walk()递归遍历所有的子目录和文件夹
'''
path = os.getcwd()#返回绝对路径
print(path+'\n')
list_files = os.walk(path)

for dirpaths,dirnames,filenames in list_files:
    for dir in dirnames:
        print(os.path.join(dirpaths,dir))
    # print('*'*20)
    for file in filenames:
        print(os.path.join(dirpaths,file))

12.shutil模块(拷贝和压缩)

在这里插入图片描述

## shutil : 拷贝和压缩

import shutil

# 拷贝文件
shutil.copyfile('1.txt','1_copy.txt')

# 拷贝文件夹 以及其中的内容 只能拷贝一次,多次则报错
shutil.copytree('movie','example')

# 压缩 解压缩
shutil.make_archive('example/haha','zip','movie') # 将movie文件夹下的文件,以zip格式压缩至example文件夹下命名为haha

import zipfile
# z1 = zipfile.ZipFile('z1.zip','w')
# z1.write('1.txt')
# z1.write('1_copy.txt')
# z1.close()

z2 = zipfile.ZipFile('z1.zip','r')
z2.extractall('z2')
z2.close()

猜你喜欢

转载自blog.csdn.net/qq_44783177/article/details/108059388