# open()函数用于创建文件对象,基本语法格式如下: open(文件名[打开方式]) 如果只是文件名,代表在当前的目录下的文件。文件名可以录入全路径,比如:”D:\a\b.txt 为了减少"\" 的输入,可以使用原始字符串:r"d:\b.txt" 具体示例如下 f = open (r"d:\b.txt","w") 打开方式有如下几种: r: 读read 模式 w:写write 模式。如果文件不存在则创建,如果文件存在,则重写内容 a:追加append模式。如果文件不存在则创建文件;如果文件存在,则在文件末尾追加内容 b:二进制binary模式(可与其他模式组合使用) 如果没有模式b 则创建文本文件对象 处理基本单位是”字符“ ;如果有二进制模式b 则创建的是二进制文件对象, 处理的基本单位是”字节“ +:读写模式(可与其他模式组合使用)
如下代码:
我们在当前工作目录下使用一个a.txt文件(如没有a.txt文件则创建a.txt) 使用的是a 模式 ,即追加
到文件末尾
- f = open(r"a.txt",'a')
- s = '20230829'
- f.write(s) #f.write 作用是将字符串s的内容写入a.txt文件中
- f.close() #使用此方法需要用close释放掉资源
还可以用with open 方法操作文件 好处是不需要手动释放资源 既不需要f.close()操作
具体代码如下
- with open(r"a.txt","a") as f:
- s = "itbaizhan\next\n"
- f.write(s)
ASCII : 7位表示一个字符 最高位为0 只能表示128个字符 ISO8859-1: 8位表示1个字符,能表示256个字符,兼容ASCII GB2312: 主要用于汉字处理,GB2312主要收录了6763个汉字,682个符号 GBK: 于1995年指定,扩展了GB2312 收录了21003个汉字 eg:windows 使用open()函数时默认的编码是GBK GB18030: 强制执行 向下兼容GBK和GB2312 收录70000余字 Unicode:定长编码,2个字节表示1个字符 所有字符都用16位来表示 所以(2**16= 65536) 不兼容其他编码 UTF-8: 变长编码:1-4个字节表示一个字符;英文1个字节,汉字3个字节 eg: linux 如下代码用两中方式插入代码 使用encoding='utf-8'指定编码 ,如不指定在编译之后的b.txt内容打开是乱码,乱码的原因是python默认的编码为GBK,所以我们要指定为utf-8编辑中文
- #测试写入中文
- # f = open(r"b.txt",'a',encoding='utf-8')
- # f.write("尚学堂\n百战程序员\n")
- # f.close()
- with open(r"c.txt","w",encoding='utf-8') as f:
- s = ['京东\n', '百度', '头条']
- f.writelines(s)
pycharm错误示例截图
在文件后追加以urf-8编码的中文后
为了确保打开的文件对象能够正常关闭,我们可以使用异常机制的finally或者with关键字实现无论出现何种情况都能关闭打开文件对象。
- # close()关闭文件流
- try:
- f = open("b.txt",'w')
- s = 'gapqo'
- f.write(s)
- except BaseException as e:
- print(e)
- finally:
- f.close()
-
- # with 关闭流 with函数的原理统try except finally 一样
- with open(r"c.txt","w",encoding='utf-8') as f:
- s = ['京东\n', '百度', '头条']
- f.writelines(s)
- """
- 文本文件的读取
- read(size)
- 从文件中读取size个字符 如果没有写size 参数 则读取整个文件 读取到文件末尾 返回空字符串
- readline()
- 读取一行内容作为结果返回
- readlines()
- 读取每一行 结果返回为列表
- """
- with open(r"b.txt","r",encoding='utf-8') as f:
- s= f.read(2) #size=2 即读取文本对象前两个字符
- print(s)
- m=f.readline() # 在read(2)之后文件会读取第一行初前两个字符后所有字符
- print("读取readline结果:{0}".format(m))
- s=f.readlines() #返回[]对象
- print("读取结果为:",s)
- # for line in f: #读取的结果同 read()类似
- # print(line)
- # while True:
- #line = f.readline()
- #if not line: #如果读不到东西了 line =0 not line=1 就退出循环
- # break
- #else:
- # print(line,end='')
"""
二进制的文本文件流程与正常文本文件流程一致
创建二进制文件 需要创建加b
例如 ”wb“ 可写的、可重写的二进制文件对象
”ab“ 可写的、追加模式的二进制文件对象
”rb“ 可读的二进制文件对象
"""
代码将会拷贝baidu.png 生成dcp.png文件 在此目录下生成.png图片
- with open(r"baidu.png",'rb') as SrcFile, open("dcp.png",'wb') as destFile:
- for line in SrcFile:
- destFile.write(line)
- """
- 文件对象的属性
- name:返回文件的名字
- mode:返回文件的打开模式
- closed:若文件被关闭,返回True
- 打开模式: r w a b +
- 文件对象的常用方法
- write(str) 将字符串str内容写入文件
- writelines(s) 将字符串列表s写入文件,不添加换行符
- seek (m,n) 把文件指针移动到新的位置 相对于n 偏移m个单位 开始 n为0 从文件头开始计算 1从当前位置开始计算 2从文件尾开始计算
- tell () 返回文件指针位置
- truncate(size) 不论指针在什么位置,只留下前size个字符,其余全部删除,如果没有传入size ,则从指针当前位置到文件末尾全部删除
- flush() 把缓冲区的内容写入文件,但不关闭文件
- close() 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源
- """
- with open("a.txt","r") as f :
- print("文件名是:{0}".format(f.name))
- print(f.tell())
- print("读取的内容:{0}".format(str(f.readline())))
- print(f.tell())
- f.seek(2, 0)
- print("读取的内容:{0}".format(str(f.readline())))
- # 序列化是指: 将对象转化为“串行化”数据形式,存储到硬盘或用过网络传输到其他地方
- """
- pickle.dump(obj,file) obj 是要被序列化的对象, file 是存储的文件
- pickle。load(file) 从file 读取数据, 反序列化成对象
- """
- import pickle
- with open("a.dat",'wb') as f:
- name = "高淇"
- age = '18'
- score = [70,80,90]
- resume = {'name':name,'age':age, 'score':score}
- pickle.dump(resume, f)
- with open("a.dat",'rb') as f:
- resume2 = pickle.load(f)
- print(resume2)
csv格式文件用于导出excel数据或者导出数据库数据 是python内置包
在使用时先导入csv
- import csv
- # 将csv格式数据导出
- with open(r"b1.csv",) as a:
- a_csv = csv.reader(a) # 创建一个csv对象 他包含了所有数据的列表,每一行为一个元素
- heads = next(a_csv) # 获取csv中所有数据 包括标题
- heads2 = next(a_csv)
- print(heads)
- for row in a_csv:
- print(row)
- # 写入数据进b1.csv数据中
- head = ['姓名','手机电话','住址']
- rows = [('jj','130111','天津'),('xx','110119','哈尔滨')]
- with open(r"b1.csv","w") as f:
- b_csv = csv.writer(f)
- b_csv.writerow(head)
- b_csv.writerows(rows)