Python文件操作
1.1.1 文件的打开
在python中,使用open()函数可以打开一个已经存在的文件,或者创建一个新的文件
格式:
open(文件名,访问模式)
f = open("test.txt","w")
说明
访问模式 说明
w 打开一个文件只用于写入,如果该文件已经存在则将其覆盖,如果不存在,创建新文件
r 以只读的方式打开一个文件,文件的指针将会在文件的开头位置,默认模式,如果文件不存在会报错
a 打开一个文件用于追加,如果该文件已经存在,文件的指针会放在文件的结尾,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建一个新文件进行写入
r+ 打开一个文件用于读写,文件的指针放在文件的开头位置
w+ 打开一个文件用于读写,如果该文件已经存在将其覆盖,如果文件不存在,创建一个新文件
a+ 打开一个文件用于读写,文件的指针放在文件的末尾位置,,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建以一个新文件进行写入
rb 以二进制的方式打开一个文件用于只读,文件的指针将会在文件的开头位置,默认模式,如果文件不存在会报错
wb 以二进制的格式打开一个文件只用于写入,如果该文件已经存在则将其覆盖,如果不存在,创建新文件
ab 以二进制方式打开一个文件用于追加,如果该文件已经存在,文件的指针会放在文件的结尾,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建以一个新文件进行写入
rb+ 以二进制的方式打开一个文件用于读写,文件的指针放在文件的开头位置
wb+ 以二进制的方式打开一个文件用于读写,如果该文件已经存在将其覆盖,如果文件不存在,创建一个新文件
ab+ 以二进制的方式打开一个文件用于读写,文件的指针放在文件的末尾位置,,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建以一个新文件进行写入
1.1.2 文件的关闭
使用函数:
close()
f = open("test.txt","w")
f.close()
注意:
作用,节省内存
1.2 文件的读写
1.2.1 写数据(write)
使用write()函数可以完成对文件写入内容
格式:
write(str)
#1.打开文件
f = open('text.txt','w')
#2.写入数据
f.write('hello python\n hello php\nhello java\nhello vb')
#3.关闭文件
f.close()
1.2.2 读取数据(read/readline/readlines)
#1.read(num) 如果读取数据不传参数,表示读取文件所有数据,如果传递参数,表示读取数据的长度(单位是字节)
#打开文件
f = open('text.txt','r')
# str = f.read() #表示读取所有数据
# print(str)
# str2 = f.read(5)
# print(str2)
# str3 = f.read(10)
# print(str3)
#总结:如果读取文件数据多次,下一次读取是从上一次读取文件结束的位置开始
#2.readline(num)每次读取一行,返回的是字符串,如果传递参数,表示读取一行内容中长度
# content = f.readline()
# print(content)
# content2 = f.readline()
# print(content2)
# for temp in f.readline():
# print(temp)
# while True:
# ss = f.readline()
# if ss == '':
# break
# print(ss.strip())
#3.readlines()每次读取一行,把每一行数据作为列表里面的元素,返回的是一个列表
result = f.readlines()
for t in result:
print(t.strip())
1.2.3 读取CSV文件
导入CSV模块 pdf 图片
import csv
def readCsv(path):#path读取文件的路径
#定义一个列表接受读取到数据
readList = []
with open(path,'r') as a:
read = csv.reader(a)
#遍历读取到数据写入到列表readList里面
for r in read:
readList.append(r)
return readList
#调用函数
print(readCsv(r'C:\Users\1\Desktop\csv\000002.csv'))
1.2.4 写入csv数据
import csv
def writeCsv(path,data):
"""
:param path:写入数据的文件路径
:param data: 往文件里面写入的数据
:return:
"""
with open(path,'w') as w:
#往打开的文件里写入数据
write = csv.writer(w)
for row in data:
write.writerow(row)
path = r'C:\Users\1\Desktop\yaoming1.csv'
writeCsv(path,[['学号','姓名','年龄','性别'],['1','张三','20','男'],['2','李四','24','男'],['3','王五','28','男']])
1.3 应用—制作文件的备份
任务描述:
输入文件名字,然后程序自动完成对该文件的备份操作:
"""
分析
input--->string
输入你要备份的文件名
判断是否打开
存在
1.打开备份的文件
2.获取备份的文件名和后缀名
3.关闭备份的文件名
不存在
实现备份
1.定义新的文件名规则
2.将旧文件里面数据读取出来循环写入到新的文件里面
3.关闭新的文件
"""
import os.path
def copy(path):#path需要备份文件路径
oldFileName = input('请输入你要备份的文件名:')
#打开备份的文件
fileName = open(oldFileName,'r')
#判断文件是否存在
if fileName:
#获取备份的文件名和后缀名
copyFile = oldFileName.rfind('.')
name = oldFileName[0:copyFile]
#splitText(path)可以获取文件的名称和扩展名
#获取文件的后缀名
fileFlag = os.path.splitext(path)[1]
#定义新的文件名规则
newFileName = name+' - 副本'+fileFlag
#打开新的文件名,往里面写入数据
newFile = open(newFileName,'w')
#读取旧的文件数据往新的文件里面循环写入
for line in fileName.readlines():
newFile.write(line)
#关闭文件
fileName.close()
newFile.close()
else:
print('该文件不存在')
#调用函数
copy('text.txt')
1.4 文件的定位读写
定为:
通俗的讲就是找到一个位置
1.获取当前读写文件的位置
在读取文件的过程中,如果想知道当前的位置,
可以使用函数tell()来获取,是光标开始的位置
2.定位到某一个位置
如果在读写文件的过程中,需要从另外一个位置进行操作,可以使用seek()函数
格式:
seek(offset,from)
offset:偏移量字符,给的值正数从左到右读取,给的值负数从右往左
from:方向
0:表示文件的开头
1:表示当前位置
2:表示文件的末尾
f = open('text.txt','rb')
str = f.read(5)
print('读取的数据是:',str)
#获取当前读取的位置tell()函数
position = f.tell()
print('当前的位置是:',position)
str2 = f.read(15)
print('第二次读取的数据是:',str2)
postion2 = f.tell()
print('第二次读取的位置是:',postion2)
#重新设置读取的位置 seek()
f.seek(-3,1)
str3 = f.read(3)
print('第三次读取的数据是:',str3)
postion3 = f.tell()
print('第三次读取的位置是:',postion3)
"""
如果使用r模式读取文件,只能从文件开头计算相对位置,程序报错
如果使用rb模式读取文件,程序会正常运行
"""
1.5 文件的重命名
概述:
需要对文件进行重命名操作,python中有一个模块os模块----》文件的操作
有一个函数rename()可以完成对文件名的重新命名
格式:
rename(需要修改的文件名,新的文件名)
import os
os.rename('./yaoming.txt','./yaoming2.txt')
1.6 文件的删除
概述:
os模块中remove()可以完成对文件的删除操作
格式:
remove(待删除的文件名)
案例:
os.remove("毕业论文.txt")
2.文件夹的相关操作
2.1 创建一个文件夹
概述:
使用os模块中mkdir()函数
格式:
mkdir(待创建的文件名)
案例:
import os
os.mkdir("张三")
2.2 获取当前的目录
概述:
使用os模块中listdir()函数
格式:
listdir()
案例:
import os
print(os.listdir("./"))
2.4 删除文件夹
概述:
使用os模块中的rmdir()函数
格式:
rmdir(待删除的文件夹)
案例:
import os
os.rmdir("张三")
2.5 应用----批量修改文件名(重命名)
例如:网上批量下载电视剧,电视剧名称比较长,我想批量修改剧名
3.StringIO和BytesIO
3.1 StringIO
很多时候,数据读写不一定是文件,也可能在内存中读写
StringIO:在内存中读写str
from io import StringIO,BytesIO
#1.str写入内存 首先创建StringIO() 可以像普通文件一样写入数据
s = StringIO()
str = s.write('hello')
print(str)
str2 = s.write(' ')
print(str2)
str3 = s.write('world')
print(str3)
#getvalue()获取写入内存中的数据
print(s.getvalue())
#str初始化StringIO(),可以像普通文件一样读取
ss = StringIO('hello python\n hello php\n hello abc\n aaaa')
while True:
rr = ss.readline()
if rr == '':
break
# print(rr.strip())
3.2 BytesIO
StringIO操作---》str
如果操作二进制数据,需要使用BytesIO
BytesIO实现在内存中读写byte数据
#2.str写入BytesIO,创建一个BytesIO(),可以像普通文件一样写入数据
b = BytesIO()
bb = b.write('中国'.encode('utf-8')) #写入的是utf-8转码后的字节
print(bb)
print(b.getvalue())
r = BytesIO(b'\xe4\xb8\xad\xe5\x9b\xbd')
print(r.read())