一、文本文件基本操作
1.1 打开文本文件,得到文件句柄并赋值给一个变量
f = open('test', 'r', encoding='utf-8') # 默认打开模式为r
文件路径:相对路径、绝对路径
1)当文件和要执行的.py文件在相同目录下,直接使用文件的名称即可
2)当文件与要执行的.py文件不在相同目录下,使用绝对路径
文件的路径,需要用取消转义的方式表示: 1.使用 \\ ;2.使用 r'c:/test/test.txt'
第一种打开文件方式: 使用 \\
file1 = open('G:\\myPyTest\\2.txt', 'w', encoding='utf-8') file1.write('哈哈') file1.close()
第二种打开文件方式: 使用r 参数说明:文件路径、操作模式、编码
file2 = open(r'G:\myPyTest\1.txt', 'w', encoding='utf-8') file2.write('嘿嘿') file2.close()
open打开文件是依赖了操作系统的提供的途径
操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
win7\8--->utf-8 mac/linux---->gbk
第三种打开文件方式:with
with open('geci','a+') as f: #打开一个文件,把这个文件的句柄付给f for line in f: pass
打开文件的模式有:
rb,【以二进制格式打开一个文件只用于只读,文件指针将放在文件开头,为默认模式】
r,只读模式【不可写,文件不存在的话会报错,文件的指针会放在文件开头,r为默认模式】
w,只写模式【不可读,文件不存在则创建,存在则清空文件内容】
a,追加模式【不可读,文件不存在则创建,存在不会清空文件内容,只在文件末尾追加内容,此时指针在文件末尾】
"+" 表示可以同时读写某个文件
r+,【可读、可写、可追加,如果打开的文件不存在,会报错,文件指针放在文件开头】
rb+,【以二进制格式打开一个文件用于读写,文件指针放在文件开头】
w+,【写读模式,使用w+的话,已经存在的文件内容会被清空,可以读到已经写入的文件内容,文件不存在则创建】
a+,【追加读写模式,文件不存在则创建,存在则只追加写入内容,指针在文件末尾】
1.2 读取文件内容
f = open('names','a+',encoding='utf-8') #打开文件 print(f.read()) #读取文件所有内容 print(f.readline()) #读取一行内容 print(f.readlines()) #是把文件的每一行放到一个list里面,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
二、文件操作方法
f.seek(0) #把当前文件指针指向哪,0表示将光标定位到文件开头
f.seek(10) #把光标定位到第10个字符之后 f.tell() #获取当前文件指针的位置
print(f.tell()) #输出10 f.write('爱情证书') #写入内容 写的时候传入一个str类型 f.writelines() #str list dic 元组类型(写的时候传入一个可迭代的对象) f.flush() #强制把缓冲区的数据写入磁盘 f.truncate() #清空文件内容 f.close() #关闭文件
2.1 大文件的操作方法
用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,
读过的内容就从内存中释放了
f = open('file.txt') for line in f: print(line)
#这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存
三、修改文件
3.1 简单粗暴直接,先清空再写入
1) 打开一个文件,获取到所有内容
2) 对内容进行修改
3) 清空原来的内容
4) 把新的内容写进去
3.2 实例
3.2.1 需求一:将文件中所有123456 修改成7890
f = open('username','a+') f.seek(0) all_str = f.read() #获取所有内容,为字符串类型 new_str = all_str.replace('','') #修改文件,将所有密码123456替换成7890 f.seek(0) f.truncate() #清空文件内容 f.write(new_str) f.close()
3.2.2 需求二:将文件中素有用户名前加上sys_
f = open('username','a+') f.seek(0) all_str = '' for s in f:#循环文件,遍历出每一行数据 new_s = 'syz_' + s all_str= all_str +new_s f.seek(0) f.truncate()#清空文件内容 f.write(all_str) f.close()
3.3 修改文件高效方式
1) 打开两个文件,a.txt a.txt.bak
2) a文件第一行,写一行到b文件中
3) 删除a文件,将b文件名称改为a文件
import os with open('words',encoding='utf-8') as fr,open('.words.bak','w',encoding='utf-8') as fw: for line in fr: new_line = line.replace('学','learn') #将文件每一行里的“学”字替换成“learn” fw.write(new_line) fw.flush() #强制将缓存区的数据写到磁盘上 os.remove('words') #删除文件 os.rename('.words.bak','words') #改名