Python3文件操作:
使用文件的目的: 就是把一些数据存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份, 省时省力,防止了数据的丢失。
1.打开文件
在Python,使用open函数,可以打开一个已经存放的文件,或者创建一个新的文件 open(文件名,访问模式)
访问模式有如下:
实例如下:
f = open("test.txt","r")
注意的是:
1.常用的访问模式为 : r,w,a
2.使用r如果打开了一个不存在的文件,会报错。
3.同理,如果使用r+打开了一个不存在的文件,会报错。
4.read读取是一次性全部读取,如果再次读取相同的文件的读取不到任何东西的!
2.关闭文件:
close()
示例如下:
#新建一个文件,文件名为:test.txt
f = open("test.txt","w")
#关闭这个文件
f.close()
3.文件的读写:
3.1 读文件:
例子:
#打开一个文件
#如果文件不存在,会报错,如果操作文件里面的内容有中文,
#这样写即可: f = open("test.txt","r",encoding="UTF-8")
f = open("test.txt","r")
content = f.read()
print(content)
#注意,再次读取是读取不到任何东西的,因为read是一次性全部读取!
#content2 = f.read()
#print("content2:",content2)
#关闭一个文件
f.close()
3.2 读取指定字符的长度:
例子:
f = open("test.txt","r")
#read()可以写上每次要读取字符的长度
content = f.read(5)
print(content)
f.close()
3.3 使用with读取文件:
例子:
with open("bbb.txt","r",encoding="utf-8") as name:
print(name.read())
3.3 写文件:
例子:
#写文件
#如果该文件存在就把该文件删除在创建打开,反之,先创建在打开
f = open("abc.txt","w")
#写文件
f.write("hahhah 2017,I LOVE YOU")
f.close()
4.读数据(readlines)
就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,
并且返回的是一个列表,其中每一行的数据为一个元素。
例子:
#readlines
f = open("test.txt","r",encoding="utf-8")
contentLines = f.readlines()
print(contentLines)
f.close()
返回结果:
#一个列表,每一行是一个元素
['fsdfdsfsdf1\n', 'fdsfsdf2\n', 'fds3\n', 'fsdf4\n', 'sdf5\n', '我爱你']
4.1 读数据(readline)
每一次只读取一行数据
f = open("test.txt","r",encoding="utf-8")
#每一次只读取一行数据
contentLines = f.readline()
print(contentLines)
contentLines = f.readline()
print(contentLines)
f.close()
返回结果:
fsdfdsfsdf1
fdsfsdf2
5.完成一个复制文件
例子:
#1.打开要复制的文件
f_read = open("test.txt","r",encoding="utf-8")
#2.创建一个新的文件,用来存储源文件的数据内容
f_write = open("test[附件].txt","w")
#3.复制
content = f_read.read()
f_write.write(content)
#4.关闭文件
f_write.close()
f_read.close()
6.文件的随机读写:
定位: 可以从指定的位置,往下执行,不用从头开始。
6.1 获取当前读写的位置 在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取。
例子一枚:
f = open("abc.txt")
f.read(1)
f.read(1)
f.read(1)
#获取当前读取到的位置
position=f.tell()
print(position)
f.close()
6.2 定位到某个位置
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()
seek(offset,from)有2个参数
*offset:偏移量
*from:方向
0:表示文件开头
1:表示当前位置
2:表示文件末尾
例子:
#练习seek
#创建一个文件
w = open("www.txt","w+")
#在文件中写入值
w.write("hahahhahahlalalla")
#读取写入的文件
content = w.read()
#输出 发现输出的是空白,原因就是你刚刚写入的文件,光标是在最后一位,而read()
# 是根据光标所在的位置进行读取。
print(content)
#解决方法就是,使用seek(),把光标定位到开头 w.seek(0,0)
#再次读取
content2 = w.read()
#现在返回的就有数据啦
print(content2)
#关闭 w.close()
7. 文件的重命名、删除
有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这个功能。
7.1 文件的重命名
os模块中的rename()可以完成对文件的重命名操作
rename(需要修改的文件名,新的文件名)
例子一枚:
import os
os.rename("abc.txt","cba.txt")
7.2 删除文件
os模块中的remove()可以完成对文件的删除操作
remove(待删除的文件名)
栗子一枚:
import os
#删除
os.remove("abc[复制].txt")
8.文件夹的相关操作:
实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除等。
就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块
8.1 创建文件夹
例子一枚:
import os
#创建文件夹
os.mkdir("文件夹")
8.2 获取当前目录
栗子一枚:
import os
#获取当前目录
print(os.getcwd())
8.3 改变默认目录
栗子一枚:
import os
#改变当前目录
print(os.chdir("../"))
8.4 获取目录列表
栗子一枚:
import os
#获取当前目录列表
print(os.listdir("./"))
8.5 删除文件夹
栗子一枚:
import os
#删除文件夹
os.rmdir("文件夹")
8.6 批量修改重命名
栗子一枚:
# ./代表当前目录下的test文件夹
allFileName = os.listdir("./test")
for name in allFileName:
os.rename("./test/"+name,"./test/[张xx出品]-"+name)
9. 简单的使用文件爬取一个页面:
栗子一枚:
from urllib import request
response = request.urlopen("http://www.baidu.com")
fi = open("project.txt","w")
page = fi.write(str(response.read()))
fi.close()
10.关于序列化和反序列化:
序列化就是把对象以二进制的形式保存到本地。
反序列化就是把保存到本地的二进制对象,反序列化成对象,在代码中直接使用。
上例子:
import pickle
#序列化
#要序列化的对象
data1={"a":[1,2,3], "b":"bb", "c":None }
#创建一个本地文件
f = open("ccc.txt","wb")
#使用pickle下的dump把对象给序列化dump(对象类型,本地路径)
pickle.dump(data1,f)
#关闭
f.close()
#反序列化
#把这个文件的内容给取出来
ff = open("ccc.txt","rb")
#使用了load
result = pickle.load(ff)
print(result)
返回结果为: {'a': [1, 2, 3], 'b': 'bb', 'c': None}