一、文件读写的读书笔记
文件包括两种类型:文本文件和二进制文件。
二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制文件和文本文件最主要的区别在于是否有统一的字符编码
无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,打开后的操作不同。
Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”
a=open(...) a.write(s) #写入内容 a.writelines(lines) #将一个列表写入文件中 a.seek(offset) #把当前文件指针指向哪 a.read() #读取所有内容 a.readline() #读一行 a.readlines() #读取所有文件内容,返回一个list a.close()
open()函数提供7种基本的打开模式
打开模式 | 含义 |
'r' | 只读模式,如果文件不存在,返回异常FileNotFoundError,默认值 |
'w' | 覆盖写模式,文件不存在则创建,存在则完全覆盖源文件 |
'x' | 创建写模式,文件不存在则创建,存在则返回异常FileExistsError |
'a' | 追加写模式,文件不存在则创建,存在则在原文件最后追加内容 |
'b' | 二进制文件模式 |
't' | 文本文件模式,默认值 |
'+' | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
根据打开方式不同可以对文件进行相应的读写操作,Python提供4个常用的文件内容读取方法 .
Python提供3个与文件内容写入有关的方法
方法 | 含义 |
<file>.write(s) | 向文件写入一个字符串或字节流 |
<file>.writelines(lines) | 将一个元素为字符串的列表写入文件 |
<file>.seek(offset) | 改变当前文件操作指针的位置,offset的值: 0:文件开头; 1: 当前位置; 2: 文件结尾 |
二、读入Excel文件并存为csv,并把优秀变成90分,良好变成80分,及格变为60分,不合格0分。
把读入的Excel文件存为csv格式
import pandas as pd wenj = pd.read_excel('Python成绩登记信计.xlsx', index_col=0) wenj.to_csv('Python成绩登记信计.csv', encoding='utf-8')
把优秀变成90,良好变成80,及格变成60,不合格变成0.
fo=open("Python成绩登记信计.csv",'r',encoding='utf-8') ls=[] for line in fo: line = line.replace(' ','').replace('优秀','90').replace('良好','80').replace('不合格','0') line = line.replace('合格','60') ls = line.split(',') lns='' for s in ls: lns+="{} ".format(s) print(lns)
三、转为 HTML文件
seg1 = ''' <!DOCTYPE HTML> <html> <body> <meta charset=gb2312> <h2 align=center>Python成绩登记信计</h2> <table border='1' align="center" width=70%> <tr bgcolor='orange'> ''' seg2 = "</tr> " seg3 = "</table> </body> </html>" def fill_data(locls): seg = '<tr><td align="center">{}</td><td align="center">{}</td><td align="center">{}</td><td align="center">{}</td></tr> '.format(*locls) return seg fr = open("Python成绩登记信计.csv", "r",encoding='utf-8') ls = [] for line in fr: line = line.replace(" ","") ls.append(line.split(",")) fr.close() fw = open("Python成绩登记信计.html", "w") fw.write(seg1) fw.write('<th width="25%">{}</th> <th width="25%">{}</th> <th width="25%">{}</th> <th width="25%">{}</th> '.format(*ls[0])) fw.write(seg2) for i in range(len(ls)-1): fw.write(fill_data(ls[i+1])) fw.write(seg3) fw.close()