文件操作 - 三元运算/chardet/文件操作r w/文件的操作方法
Alex:读书可以改变一个人的气质
读书:豆瓣; 1年读20本
你的问题:想法太多,读书太少
书:追风筝的人,白鹿原
电影:阿甘正传 辛德勒名单
-------------------------------------------
1.三元运算 = 三目运算
>>> a = 2
>>> b = 5
>>> val = a if a < b else b
>>> val
2
-------------------------------------------
2.文件处理:
找到 打开 读 修改 保存 关闭
f = open(file='D:/**.txt',mode='r',encoding='utf-8') //只读
data = f.read()
f.close()
mode='r' encoding='utf-8' #表示 只读 硬盘上的0101按照utf-8的规则去‘断句’,再将断句后的每一段0101转换成Unicode的01010,Unicode对照表中0101和字符的对应关系。
mode='rb' # 以什么形式存的就以什么形式读 二进制打开 不是给人看的给机器看的 视频 图片 网络传输用的
-----------------------
3.chardet:
问:加入不知道你要处理的文件是什么编码怎么办?用第三方的模块 pip3 install chardet
安装第三方的共工具箱 chardet 检测字符编码
pip3 install chardet //python的chardet的模块安装 C:\Users\bj\AppData\Local\Programs\Python\Python36\Scripts 下面 输入pip3 install chardet
import chardet
f = open(file='联系方式.txt',mode='rb')
data=f.read()
print(data)
---->: b'alex 1233\njack 1243\nrain afd\n\xd6\xd0\xb9\xfa\n\xc3\xc0\xb9\xfa'
f.close()
result = chardet.detect(data)
print(result)
----> {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
print(data.decode('gb2312'))
alex 1233
jack 1243
rain afd
中国
美国
------------------------
4.边读边操作文件
model='r/rb' #整个文件 一次性读到内存中
边读边处理;一点一点读 循环读
f = open('联系方式.txt', mode='r', encoding='gb2312')
for line in f
print(line)
f.close()
-------------------------
5.model = 'w/wb' 创建在写 如果之前同名有文件,就清空了再重写
f = open('联系.txt','w',encoding='utf-8')
f.write("路飞学城")
f.close()
f = open('兼职1.txt', 'wb')
f.write("好孩子1".encode("gbk"))
f.close()
-------------------------
6.追加模式操作文件model='a/ab'
f = open('兼职2.txt','a',encoding='gbk')
f.write("\nalice\nalex")
f.close()
f = open('兼职2.txt','ab')
f.write("\nhello\nworld".encode("gbk"))
f.close()
-------------------------
7.model='r+'读写模式 先读后写 支持往后追加
f = open("联系方式.txt",'r+',encoding='gbk')
print('content:',f.read())
f.write('\nnew 1哈哈')
f.write('\nnew 2哈哈')
print('newcontnet:',f.read()) #因为读文件的光标到了最后
f.close()
-------------------------
8.model='w+'写读模式 以写的模式打开 支持你读 创建了文件,写东西 一般不用
f = open("联系方式.txt",'w+',encoding='gbk')
data = f.read()
print(data)
f.write('\nnew a')
f.write('\nnew b')
f.write('\nnew c')
print('new:',f.read())
f.close()
------------------------
9.文件的其他操作方法:
fileno() 返回文件句柄在内核中的索引值
flush() 把文件从内存buffer里强制刷新到硬盘
readline() 只读一行 遇到\r or \n为止
tell() 返回当前文件操作光标位置 按字节算的
seek(0) 把操作文件的光标移动到指定位置 按字节算的
read(1) 读几个字符 按字节算的
readable() 判断是否可读
seekable() 判断文件是否可进行seek操作
writeable()判断文件是否可写
truncate(6) 按指定定长度截断文件 r+模式 从当前位置往后截断
-------------------------
10.文件修改功能 - 数据被覆盖
# 数据被覆盖 不是往后移 硬盘存储的原理造成的
# word 为什么可以呢 文件全部加载到内存 改完之后在重新写回去
# 如果文件特别大 会把内存撑爆
# 边读边写 一点一点 读到内存 在写回新文件
f = open("联系2.txt", 'r+', encoding='gbk')
f.seek(2)
f.write("我们")
f.close()
-------------------------
11.文件修改占硬盘 - 数据被修改
import os
f_name = '联系方式.txt'
f_new_name = '联系方式new.txt'
old_str = '学诚'
new_str = '大学城大学城'
f = open(f_name, 'r+', encoding='gbk')
f_new = open(f_new_name, 'w', encoding='gbk')
for line in f:
if old_str in line:
line = line.replace(old_str,new_str)
f_new.write(line)
f.close()
f_new.close()
# os.rename(f_new_name,f_name)
os.replace(f_new_name, f_name)
-----------------------------------------------------------------------
总结:
1.三元运算
2.model = 'r/rb'
3.chardet
4.边读边操作文件 s
5.model = 'w/wb'
6.model='a/ab'
7.model='r+'
8.model='w+'
9.文件的其他操作方法
10.文件修改功能