1 文件操作介绍
in: 输入,读入。从硬盘中读到内存
out: 输出。从内存写到硬盘
文件的作用: 数据存储
2 文件的打开与关闭
2.1 打开文件
在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
open(文件名,访问模式)
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Open file and return a stream
open这里用了三个参数
1、文件的名字
2、模式
3、编码方式 与 文件的编码格式一致。如果有中文,不一致就造成乱码
说明
访问模式 | 具体说明 |
---|---|
r | 以只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式。 |
w | 打开一个文件只用于写入,如果该文件已存在则将其覆盖;如果不存在,创建新文件。 |
a | 打开一个文件用于追加,如果该文件已存在,文件将会放在文件的结尾,也就是说,新的内容会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读,文件指针将会放在文件的开头,这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入,如果该文件已存在则将其覆盖;如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,也就是说,新的内容会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写,文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写,如果该文件已存在则将其覆盖;如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾,文件打开时会是追加模式;如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写,文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写,如果该文件已存在则将其覆盖;如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾;如果该文件不存在,创建新文件用于读写。 |
r,w,a:
操作的都是字符
目标文件:文本文件
字符 = 字节+解码
bytes.decode()
字符+编码 = 字节
str.encode()
rb,wb,ab:
操作的都是字节
目标文件:任何文件
2.2 关闭文件
close()
文件流是占用系统资源的,所以用完之后,记得关闭。否则,占用操作系统资源。
2.3 路径
- Linux Mac
e.g. '/home/admin/tt.txt' - Windows
e.g. 'C:\user\a.txt'
e.g. 'C:/user/a.txt'
e.g. r'C:\user\a.txt'
3 文件的读写
3.1 写数据(write)
- 使用write()可以完成向文件写入数据
3.2 读数据(read)
- 会读取所有内容,但是开发中一般不用,测试使用
- 使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
- 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的
3.3 读数据(readlines)
- 就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
3.4 读数据(readline)
- 读一行
4 应用:制作文件的备份
任务描述:
输入文件的名字,然后程序自动完成对文件进行备份
参考代码:
oldFileName = input("请输入要拷贝的文件名字:")
oldFile = open(oldFileName,'r')
# 如果打开文件
if oldFile:
# 提取文件的后缀
fileFlagNum = oldFileName.rfind('.')
if fileFlagNum > 0:
fileFlag = oldFileName[fileFlagNum:]
# 组织新的文件名字
newFileName = oldFileName[:fileFlagNum] + '[复件]' + fileFlag
# 创建新文件
newFile = open(newFileName, 'w')
# 把旧文件中的数据,一行一行的进行复制到新文件中
for lineContent in oldFile.readlines():
newFile.write(lineContent)
# 关闭文件
oldFile.close()
newFile.close()
5、文件的随机读写
5.1 获取当前读写的位置
在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取
从0开始到字符的个数
# 打开一个已经存在的文件
f = open("test.txt", "r")
str = f.read(3)
print ("读取的数据是 :%s ", str)
# 查找当前位置
position = f.tell()
print ("当前文件位置 :%s ", position)
str = f.read(3)
print ("读取的数据是 :%s ", str)
# 查找当前位置
position = f.tell()
print ("当前文件位置 :%s ", position)
f.close()
5.2 定位到某个位置
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用
seek(位置)
6、文件的重命名、删除
7、文件夹的相关操作
- [ ] 详细了解文件文件夹的操作,需要掌握os,os.path.shutil模块内容
8、应用:批量重命名
import os
import os.path
#输入完整路径
path = input('输入路径:')
#列出所有内容
ls = os.listdir(path)
#切换工作目录
os.chdir(path)
#遍历
for i in ls:
#判断是否是文件
if os.path.isfile(i):
num = i.rfind('.')
if num!=-1:
newName = i[:num]+'-new'+i[num:]
#重命名
os.rename(i,newName)