平博88平博88

平博中国网
平博88体育

ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十五课(文件操作、)

 

ParisGabriel            每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰   

                      Python人工智能从入门到精通

 

 

 

最近简直要死了 发烧感冒 喉咙痛。。。。、

 

如何长期保存计算机中数据: 需要文件操作

  文件 file:     文件是用于数据存储的单位     文件通常用来长期储存数据     文件中的数据以字节为单位进行顺序储存文件的操作流程:   1.打开文件   2.读/写文件   3.关闭文件   注:     任何操作系统, 一个应用程序同时打开文件数量有最大数文件打开函数:   open(file, mode=‘rt’) 用于打开一个文件, 返回此文件流对象,   如果打开文件失败, 则会触发osError错误文件的关闭方法:   F.colse() #关闭问津 释放系统资源

示例:

# 此示例示意文件的打开和关闭操作try: f = open("./aaa.txt") # 不存在此文件 # f = open("./myfile.txt") # 不存在此文件 print("打开文件成功") # 此处要进行读/写操作 f.close() # 半闭文件except OSError: print("文件打开失败")

文件方法:

文件

mode 模式字符的含义

字符含义
"r"以只读方式打开(默认)
"w"以只写方式打开,删除原有文件内容(如果文件不存在,则创建该文件并以只写方式打开)
"x"创建一个新文件, 并以写模式打开这个文件,如果文件存在则会产生"FileExistsError"错误
"a"以只写文件打开一个文件,如果有原文件则追加到文件末尾
"b"用二进制模式打开
"t"文本文件模式打开 (默认)
"+"为更新内容打开一个磁盘文件 (可读可写)
缺省模式是 "rt""w+b" 可以实现二进制随机读写,当打开文件时,文件内容将被清零"r+b" 以二进制读和更新模式打开文件,打开文件时不会清空文件内容"r+" 以文本模式读和更新模式打开文件,打开文件时不会清空文件内容

python 文件常用方法:

方法说明
F.close()关闭文件(关闭后文件不能再读写会发生ValueError错误)
F.readline()读取一行数据, 如果到达文件尾则返回空行
F.readlines(max_chars=-1)返回每行字符串的列表,max_chars为最大字符(或字节)数
F.writelines(lines)将字符串的列表或字符串的列表中的内容写入文件
二进制文件操作方法 
F.read(size=-1)从一个文件流中最多读取size个字符(文本文件)或字节(二进制文件),如果不给出参数,则默认读取文件中全部的内容并返回
F.write(text)写一个字符串到文件流中,返回写入的字符数(文本文件)或字节数(二进制文件)
F.tell()返回当前文件流读写指针的绝对位置(字节为单位)
F.seek(offset, whence=0)改变数据流读写指针的位置,返回新的绝对位置
F.flush()把写入文件对象的缓存内容写入到磁盘
  
F.readable()判断这个文件是否可读,可读返回True,否则返回False
F.writable()判断这个文件是否可写,可写返回True,否则返回False
F.seekable()返回这个文件对象是否支持随机定位
F.truncate(pos = None)剪掉 自pos位置之后的数据,返回新的文件长度

 

文本文件操作:   操作模式:   ‘t’   说明:     1.默认文件储存的都为字节数据, 在读写过程会自动进行编解码操作     2.文本文件以行位单位进行分割, 在python内部统一用""做为换行符进行分割     3.对文本文件的读写操作需要用字符串(str)进行数据操作 Linux换行符: "" Windows 换行符: "" 新的Mac OS 换行符: "" 旧的Macintosh换行符: ""(已不用了)

 

文件流对象是可迭代对象, 迭代过程中将换行符“”作为分隔符

f = open("phonenumber.txt") for line in f: print(line) # 打印每一行的数据

 

标准输入输出文件:   sys.stdin    标准输入文件   Ctrl + D      输入文件结束符   sys.stdout    标准输出文件   sys.stderr       标准错误输出文件   标准文件绝对不能关闭 Linux系统内所有的硬件都会映射成文件 关闭文件会导致错误模块:sys 注:   标准文件不需要打开和关闭就可以使用 示例:

import syssys.stdout.write("我是标准输出")sys.stderr.write("我是一个错误")import syss = sys.stdin.read()print("s=", s)print("程序结束")

 

二进制文件操作:   二进制文件操作模式字符:‘b’   默认文件中存储的是以字节数据为单位通常有人为规定格式   二进制文件操作需要用字节串进行读写   F.read()/F.readline() F.readlines()返回类型 对于文本操作   F.write() 对于二进制文件也需要用字节串进行操作   F.tell  作用:     返回当前的读写位置(从文件头以字节为单位)   F.seek方法:     F.seek(偏移量,whence=相对位置)  偏移量     大于0的数代表向文件尾方向移动的字节数     小于0的数代表向文件头方向移动的字节数   相对位置     0代表从文件头开始偏移     1代表从文件当前位置开始偏移     2代表从文件尾开始偏移 (第一个参数必须是负的) 示例:

# 此示例示意用seek改变文件的读写位置,用tell来得到读写位置f = open("myseek.txt", "rb")b = f.read(2) # b"AB" 读取出来print(b) # b"AB# 从头开始向后走5个字节# f.seek0)# 从当前位置向后走3个字节# f.seek1)# 从文件尾向前数15个字节f.seek(-15, 2)b = f.read(5)print(b) # b"abcde"f.close()

 

汉字编码(只讲两种)   国标系列:     GB18030(二字节或四字节编码27553个字)     GBk二字节编码21003个字)     GB2312二字节编码6763个字)     (Windows 常用)   国际标准Unicode <---> UTF-8 (Ascii 占1字节 汉字占3字节)     (Linux Mac OS X / IOS /Android)     python编码字符串:     ‘gb18030’     ‘gb2312’     ‘gbk’     ‘utf-8’     ‘ascii’     ....以上字符串用于encidedecode编码注释:   在Python源文件中的第一行第二行写入如下内容:     # -*- codeing:gbk -*-     #设置源文件编码格式为gbk     或     # -*- codeing:utf-8 -*-     #设置源文件编码格式为utf-8   作用:     告诉解释执行器文件的编码是什么

 

练习: 自己写一个文件 "info.txt" 内部存一些文字信息 如: 张三 20 100 李四 21 96 小王 22 98 写程序将这些数据读取出来,打印到终端上

答案:

try: f = open("myfile.txt") L = f.readlines() for x in L: s = x.strip() n, a, s = s.split() print("姓名:", n, "年龄:", int(a), "成绩:", int(s))except: print("打开文件是失败")

练习: 1. 写程序,循环输入很多个人的姓名,电话号码, 当输入结束后将这些信息存入到文件phonenumber.txt中 (建议先用列表暂存数据,格式自己定义)

  2. 写程序,将phonenumber.txt文件中的数据读取出来.     再用以下格式打印出来: 如: 小张 的电话是 13888888888 小李 的电话是 13999999999

 

练习: 1. 写程序实现复制文件的功能 要求: 1. 要考虑特大文件问题 2. 要关闭文件 3. 要能复制二进制文件 如: 请输入源文件路径名: /home/tarena/xxx.tar.gz 请输入目标文件路径名: ./a.tar.gz 显示: 文件已成功复制

答案:

def copy_myfile(): try: ypath = input("please inout raw path:") xpath = input("please inout new path:") f1 = open(xpath, "w+b") f = open(ypath, "r+b") for x in f: f1.write(x) f1.close() f.close() print("File copied") except: print("file not inexeistence")copy_myfile()

2. 修改学生信息管理程序,要求加入两个功能: 9) 保存信息到文件(si.txt)

 

L = [{"name": "Tom", "age": 20, "score": 98}, {"name": "Lin", "age": 21, "score": 99}, {"name": "Garin", "age": 19, "score": 100}]def student_file(L): try: f = open("./si.txt", "x") for x in L: f.write(x["name"]) f.write(" ") f.write(str(x["age"])) f.write(" ") f.write(str(x["score"])) f.write("") except FileExistsError: f = open("./si.txt", "a") for x in L: f.write(x["name"]) f.write(" ") f.write(str(x["age"])) f.write(" ") f.write(str(x["score"])) f.write("")student_file(L)

 

 

10) 从文件中读取数据(si.tx

..................

欢迎阅读本文章: 唐老师

平博代理

平博中国网