一、Python文件操作
对文件的操作有2种,文本文件、二进制文件(视频、图片等)
1.1 open方法基本使用
open(file, mode='r', encoding=None);
几种打开模式
'r' open for reading (default)
'w' open for writing, truncating the file first (写模式,如果文件在,先清空【危险】)
'x' create a new file and open it for writing (python3新增,创建模式,如果文件在,会报错)
'a' open for writing, appending to the end of the file if it exits (日志)
'b' binary mode (二进制文件)
't' text mode (default) (文本)
'+' open a disk file for updating (reading and writing)
*The default mode is 'rt' *
一个文件对象被open方法创建后,这个对象可用的有下面这些方法
close 关闭文件
closed 查看文件是否已关闭
encoding 返回文件的编码
flush 把缓存里的写入数据强制刷新硬盘
isatty 返回文件是否是'interactive'数据流,比如是个命令行终端,(在unix系统,一切皆文件)
mode 返回当前文件模式
name 返回文件名
read 读指定长度的内容,f.read(1024)读1024字节,不指定参数的话,就读所有内容
readable 文件是否可读
readline 读一行
readlines 读所有,每行列表形式返回
seek 把光标移到指定位置
seekable 该文件光标是否可移动
tell 返回当前光标位置 (迭代器中不能用)
truncate 截断文件,f.truncate(100),从文件 开头截断100个字符,后边的都扔掉
writable 是否可写
write 写内容
writelines 把一个列表写入,每个元素是一行
model_contacts.txt
姓名 地区 身高 体重 电话
况咏蜜 北京 171 48 13651054608
王心颜 上海 169 46 13813234424
马纤羽 深圳 173 50 13744234523
乔亦菲 广州 172 52 15823423525
罗梦竹 北京 175 49 18623423421
刘诺涵 北京 178 48 18623423765
岳妮妮 深圳 177 54 18835324553
贺婉萱 深圳 174 52 08933434452
叶梓萱 上海 171 49 18042432324
杜姗姗 北京 167 49 13324523342
f=open("model_contacts.txt")
# data=f.readO#读所有
# print(data)
# data=f.read(2)#代表18个字符呢?还是字节?
白#print(data)
print(f.readline())
print(f.readline())
print(f.readline())
for line in f:
if "梓宣" in line:
print(line)
f.seek(0) #光标移动到开头
/注意:在文本模式下,这个3是代表3个字符,在二进制f模式下,这个3是代表3个字节。
1.3 追加模式
f = open('model_contacts.txt',"a")
注意:追加模式,即使通过f.seek()把光标移到其它位置,再f.write()的时候,依然是写到最后的。
但是f.seek(10),然后再f.truncate(),会实现文件截断,只保留10个字符。
1.4 修改
r+是修改模式
直接调用f.write()会从开头开始写,然后会往后覆盖(一个中文3个字节)...如果只覆盖了后边某一个文字的一半,就会出现乱码。
**seek是移动字节**
**tell返回字节数**
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
f = open("model_contacts.txt", "r+", encoding='utf-8')
# 1.先把文件内容加载到内存
# 2.替换要改的部分
# 3.清空原文件内容
# 4.把新内容写回去
data = f.read()
# 备份
back_file = open("model_contacts.txt.bak", "w", encoding="utf-8")
back_file.write(data)
back_file.close()
data_new = data.replace("马纤羽", "刘翠花TracyLiu") # 把马纤羽改成刘翠花TracyLiu
f.seek(0) # 移动到文件的开头位置
f.truncate() # 清空原文件
f.write(data_new)
f.close()
1.5 删除
import os
os.remove("文件名")
1.6 处理不同编码的文件
Mac操作系统,系统默认编码是utf-8,open方法会默认用utf-8格式打开所有文件。
但windows是gbk,若收到别人从windwos上发一个文件,是gbk编码的,我直接打开会出现什么情况?
文件头# -*- encoding:gbk -*-
声明的作用是告诉解释器,后面的代码是用什么编码的.
f = open("model_contacts.txt", "r+", encoding='utf-8')