文件操作初识
在d盘创建”护士空姐学生少妇联系方式”的txt 文件
path 文件路径:d:护士空姐学生少妇联系方式.txt
encoding编码方式:utf-8,gbk....
mode 操作方式: 只读,只写,追加,读写,写读.....
# f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
# print(f2.read())
# f1.close()
路径:绝对路径:从根目录开始一直找到文件。
相对路径:从当前目录开始找到的文件。
错误原因分析:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte
编码错误:文件存储时编码方式与文件打开时的编码方式不一致。
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated uXXXX escape
两种:
第一种:加r
f1 = open(r'd:u护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
print(f1.read())
f1.close()
第一种:加
f1 = open('d:\护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
print(f1.read())
f1.close()
#凡是带b不用encoding
#只有是r模式 mode='r'可以省略不写
常用操作方法
r,w,a
读模式:
*r
read
# 1,f.read() 全部读出来。
# f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
# print(f2.read())
# f2.close()
read(n)
# f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
# print(f1.read(3))
# f1.close()
# r模式:read(n) n 是按照字符读取。
# rb模式:read(n) n 是按照字节读取。
readline()
# f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
# # print(f1.readline())
# # print(f1.readline())
# # print(f1.readline())
# # print(f1.readline())
# f1.close()
readlines()
# f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
# print(f1.readlines())
# for line in f1.readlines():
# print(line)
# f1.close()
for循环 最好的
# f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
# for line in f1:
# print(line)
# f1.close()
rb
# f1 = open('护士学生空姐班主任.txt',mode='rb')
# print(f1.read(1))
# f1.close()
*r+
# f1 = open('护士学生空姐班主任.txt', encoding='utf-8', mode='r+')
# print(f1.read())
# f1.write('666')
# f1.close()
r+b
# f1 = open('护士学生空姐班主任.txt', mode='r+b')
# print(f1.read())
# f1.write('666'.encode('utf-8'))
# f1.close()
写模式:
*w
# f1 = open('log1', encoding='utf-8', mode='w')
# f1.write('老男孩是最好的培训学校...')
# f1.close()
# f1 = open('log1', encoding='utf-8', mode='w')
# f1.write('法国进口分类结果')
# f1.close()
w:没有文件,创建文件写内容。
w:如果有文件,清空原文件,写入新内容。
wb
# f1 = open('log2', mode='wb')
# f1.write('法国进口分类结果'.encode('utf-8'))
# f1.close()
w+
# f1 = open('log1', encoding='utf-8', mode='w+')
# f1.write('老老男孩.....')
# f1.seek(0) # 调整光标
# print(f1.read())
# f1.close()
w+b
追加模式
*a
a:没有文件,创建文件写内容。
a:如果有文件,最后面追加新内容。
# f1 = open('log3', encoding='utf-8', mode='a')
# f1.write('barry')
# f1.close()
ab
# f1 = open('log3', mode='ab')
# f1.write('中国'.encode('gbk'))
# f1.close()
a+
# f1 = open('log3', encoding='utf-8', mode='a+')
# f1.write('范德萨急功近利开发工具')
# f1.seek(0)
# print(f1.read())
# f1.close()
a+b
补充:
#ps 非文字的文件的读取写入
# f1 = open('11.jpg', mode='rb')
# content = f1.read()
# print(content)
# f1.close()
# f2 = open('小猪佩奇.jpg', mode='wb')
# f2.write(content)
gbk utf-8
对于字母,数字,特殊字符的编码都是引用ascii码,所以可以直接转化。
s1 = '123abc*'
b1 = s1.encode('utf-8')
s2 = b1.decode('gbk')
print(s2)
05,文件操作常用方法
# readlable() writeable()判断是否可读或者可写
# f1 = open('log1', encoding='utf-8')
# print(f1.readable())
# print(f1.writable())
# f1 = open('log1', encoding='utf-8',mode='r+')
# print(f1.readable())
# print(f1.writable())
# seek: 按照字节去调整光标
# f1 = open('log1', encoding='utf-8')
# f1.seek(3)
# print(f1.read())
# f1.close()
# tell 告诉光标的位置
# f1 = open('log1', encoding='utf-8')
# print(f1.tell())
# print(f1.read())
# print(f1.tell())
# f1.close()
#truncate 对原文件进行截取内容,以字节形式,只能在a模式下使用。
# f1 = open('log1', encoding='utf-8', mode='a')
# f1.truncate(3)
# f1.close()
#文件操作的另一种写法
# with open() as 不用主动关闭 f1.close()
# 同一open 可以操作多个文件
# with open('log1', encoding='utf-8') as f1:
# print(f1.read())
# with open('log1', encoding='utf-8') as f1,
# open('log2',encoding='utf-8', mode='w') as f2:
# print(f1.read())
# f2.write('666')
# with open('log1', encoding='utf-8') as f1:
# content = f1.read()
# f1.close()
# pass
# with open('log1', encoding='utf-8',mode='w') as f2:
# f2.write('333')
06,文件的改。
1,打开原文件 old_file,将原内容读取到内存。
2,创建一个新文件new_file。
3,将原内容通过你改写形成新内容,写入到新文件。
4,将原文件删除。
5,将新文件重命名成原文件。
#方法一,原文件内容不打,可以用此方法,但是此方法还是很low。
# import os
# with open('change', encoding='utf-8') as f1,
# open('change.bak', encoding='utf-8', mode='w') as f2:
# old_content = f1.read()
# new_content = old_content.replace('alex', 'SB')
# f2.write(new_content)
# os.remove('change')
# os.rename('change.bak', 'change')
# 方法2
import os
with open('change', encoding='utf-8') as f1,
open('change.bak', encoding='utf-8', mode='w') as f2:
for line in f1:
new_line = line.replace('SB', 'alex')
f2.write(new_line)
os.remove('change')
os.rename('change.bak', 'change')