写:
f = open('aaa',mode='w',encoding='utf-8') #aaa是直接设置文件名字
f.close #退出 #可以‘aaa bbb ccc’加入
写:
f = open('aaa',mode='wb') #aaa是直接设置文件名字也可以是绝对路径加文件名
f.write('写入的内容'.encode('utf-8'))
f.close #退出
追加:
f = open('aaa',mode='a',encoding='utf-8') #aaa是直接设置文件名字 ‘a’是追加的意思 但是追加时候一定要嫁换行符‘ ’ 否则会在最后一行末尾一直写入
f.write('写入追加到后面的内容')
f.close #退出
追加:
f = open('aaa',mode='ab’) #aaa是直接设置文件名字 ‘a’是追加的意思 'b'是bytes 它是一个数据类型
f.write('写入追加到后面的内容'.encode('utf-8'))
f.close #退出
追加写读/读写:
f = open('ldd',mode='a+',encoding='utf-8') #ldd是一个相对路径里的文件名字
f.write('佳佳')
f.seek(0) #seek()括号内填入数字代表光标,光标由0开始也可以a+b ‘b’是 bytes直接存储为 utf-8 gbk。。。。。
print(f.read())
f = open('ldd',mode='a+b') #追加二进制
f.write('佳佳'.encode('utf-8'))
f.seek(0)
print(f.read())
f.close()
读写:
f = open('ldd',mode='r+',encoding='utf-8') #这里可以读也可以写是最常用的方法
f.write('佳佳') #不能写里面东西
f.seek(0) #光标
print(f.read())
f.close()
写读:
f = open('ldd',mode='w+',encoding='utf-8') #这里可以加‘b’写出来直接为utf-8 gbk。。。。格式的16进制 #encoding='utf-8不需要加
f.write('佳佳') #不能写里面东西 #加 .encodde(‘utf-8’)
f.seek(0) #光标
print(f.read())
f.close()
import os # 调用系统改的文件
os.rename('要改的文件名字',‘要改成的文件名字’)
os.remove('被删除的文件名字 ') #删除文件
#不管计算机存入时是啥文件编码格式就用二进制‘b’模式去读 准不会出错 但是千万不能指定编码格式 不然又出错
with open(file = '模特.txt', mode = 'rb') as f:
print(f.read())
b'xd6xd0xb9xfaxc8xcbxc3xf1xcdxf2xcbxea' 以‘b’开头就是二进制文件
#判断读出来的二进的二进之是什么编码格式:
import chardet #需要引包‘chardet’
relush = chardet.detect(open(file = '模特.txt', mode = 'rb').read()) #最外括号内也可以写入原来之前读出的二进制文件或者赋值一个变量方便操作
print(relush) #最后打印得出类型
{'language': 'Chinese', 'encoding': 'GB2312', 'confidence': 0.99} #'confidence': 0.99 #这个是判断真实度
f = open('兼职.txt', 'wb') #读写二进制地 时候后面不用加‘encoding’指定编码 如果强加会报错
f.write('源自二号'.encode()) # 这里的括号内可以指定编码任意格式 但是后续还是要以原来的编码格式打开
f = open('兼职.txt', 'rb') #读写二进制地 时候后面不用加‘encoding’指定编码 如果强加会报错
f.write('源自二号'.encode()) # 这里的括号内可以指定编码任意格式 但是后续还是要以原来的编码格式打开
#光标的定位:
f = open('兼职.txt', 'r+', encoding='gbk')
date = f.read()
print('旧的', date)
f.write('
肛娘 北京 167 1356984487')
f.write('
肛娘 北京 167 1356984487')
f.write('
肛娘 北京 167 1356984487')
f.write('
肛娘 北京 167 1356984487')
f.flush()
f.seek(0) # 不论是写还是读都会影响到光标的位置 光标位置在你最后一次操作文件的地方。这里我如果不‘seek’定位光标的话 ‘新的’只会打印一个空的字符串 ‘旧的’会只知度之前原有的内容 读写模式必定是先读后写
date = f.read()
print('新的', date)
f.close()
#打印内容:
婧愯嚜浜屽彿
婧愯嚜浜屽彿
婧愯嚜浜屽彿
婧愯嚜浜屽彿
肛娘 北京 167 1356984487
肛娘 北京 167 1356984487
肛娘 北京 167 1356984487
肛娘 北京 167 1356984487
#写读模式:
f = open('兼职.txt', 'w+', encoding='gbk')
date = f.read()
print('旧的', date)
f.write('
肛娘 北京 167 1356984487') # 这是读写模式这里虽然我定位了光标‘seek’但是它是先写后读 读的时候会清空掉之前的所有内容所以只是
显示新写入的内容
f.write('
肛娘 北京 167 1356984487')
f.write('
肛娘 北京 167 1356984487')
f.write('
肛娘 北京 167 1356984487')
f.flush()
f.seek(0) #这里我把光标改到了写入后的内容的最前面
date = f.read()
print('新的', date)
f.close()
打印输出:
旧的
新的
肛娘 北京 167 1356984487
肛娘 北京 167 1356984487
肛娘 北京 167 1356984487
肛娘 北京 167 1356984487
Process finished with exit code 0
其他文件操作方法:
f.readline() #在读的模式下按行读取 但是遇见'
'或者'
'会停止并等待下一次调用
f.truncate() #这个要在读写的模式下操作 是用来截取的 如果没有定位光标他会从开始0‘位置全部截取,且不保留在文件里 如果指定光标位置会从开始处’0‘截取到你指定的位置截取 但是是从左向右截取指定的字节数并保留在文件里 但是它是按照字节截取
f = open('兼职.txt', 'r+', encoding='utf-8')
f.truncate(9)
原文件内容:
打印结果:
f.readable() #判断是不是可以读 读的模式下
f.writeable() #是不是可以写 写的模式下
f.seekable() #是不是可以光标移动
f.seek() # 移动光标 但是是按照字节算的
f.tell() #查看共有多少字节 也是按字节读取
f.flush() #不退出文件操作强制保存
f.read(2) #只有’read‘是按照字符判断的 这里是读取两个字符
#覆盖:
f = open('兼职.txt', 'r+', encoding='utf-8')
f.seek(12)
f.write('老王开车') #这个样子写入会覆盖之前的向后的内容 达不到修改文件的效果 这是硬盘的特性无法改变
f.flush()
#输出:
路飞学城老王开车��学城老李 #因为这里有换行符 换行符用的是二个字节 而文字用的是三个字节 所以出现乱码 这里用的’utf-8‘
路飞学城老李
路飞学城老李
路飞学城老李
路飞学城老李
#在硬盘上改文件:
import os #调包
f_old = '兼职.txt'
f_new_name = '%s.new'%f_old
old_str = '老李'
new_str = '老王'
f = open(f_old, 'r', encoding='utf-8')
f_new = open(f_new_name, 'w', encoding='utf-8')
for i in f:
if old_str in i:
i = i.replace(old_str, new_str)
f_new.write(i)
f.close()
f_new.close()
os.replace(f_new_name, f_old) #windows下必须使用’replace‘进行改名字
#os.rename(f_new_name, f_old) #mac下面必须使用'rename'改名字
原内容:
路飞学城老李
路飞学城老李
路飞学城老李
路飞学城老李
路飞学城老李
路飞学城老李
打印后:
路飞学城老王
路飞学城老王
路飞学城老王
路飞学城老王
路飞学城老王
路飞学城老王
#在内存里改文件:
f = open('兼职.txt', 'r+', encoding='utf-8')
date = f.read()
date = date.replace('老李', '老王')
f.seek(0)
f.truncate() #为了避免乱码最好'truncate'一下
f.write(date)
f.close()
print(date)