自己的第一个网页
1.文件读写的读书笔记
文件是数据的抽象和集合,文件分的展现形态为文本文件和二进制文件
文本文件由单一特定编码组成的文件,如UTF-8编码,使用于txt文件、py文件等。
二进制文件直接由比特0和1组成,没有统一字符编码。一般存在二进制0和1的组织结构,即文件格式,适用于png文件、avi文件等。
(1)文件内容的读取
读文件要以读文件的模式打开一个文件对象,使用Python内置的open()
函数,传入文件名和标示符:
f = open('/Users/Python/test.txt', 'r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,open()
函数就会抛出一个IOError
的错误,并且给出错误码和详细的信息告诉你文件不存在:
f=open('/Users/python/notfound.txt', 'r') Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
(2)文件的写
如果文件打开成功,接下来,调用read()
方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str
对象表示:
如果文件打开成功,接下来,调用read()
方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str
对象表示:
f.read() 'Hello, world!
最后一步是调用close()
方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
f.close()
由于文件读写时都有可能产生IOError
,一旦出错,后面的f.close()
就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现:
try: f = open('/path/to/file', 'r') print f.read() finally: if f: f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with
语句来自动帮我们调用close()
方法:
with open('/path/to/file', 'r') as f: print f.read()
这和前面的try ... finally
是一样的,但是代码更佳简洁,并且不必调用f.close()
方法。
调用read()
会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)
方法,每次最多读取size个字节的内容。另外,调用readline()
可以每次读取一行内容,调用readlines()
一次读取所有内容并按行返回list
。因此,要根据需要决定怎么调用。
如果文件很小,read()
一次性读取最方便;如果不能确定文件大小,反复调用read(size)
比较保险;如果是配置文件,调用readlines()
最方便:
for line in f.readlines(): print(line.strip()) # 把末尾的'\n'删掉
(3)file-like Object
像open()
函数返回的这种有个read()
方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()
方法就行。
StringIO
就是在内存中创建的file-like Object,常用作临时缓冲。
(4)读写二进制文件
前面讲的默认都是读取文本文件,并且是ASCII编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'
模式打开文件即可:
>>> f = open('/Users/michael/test.jpg', 'rb') >>> f.read() '\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
2.利用python把excel文件格式转为csv格式。
(1)工具需要:pandas 库
步骤:在电脑开始处搜索cmd进行安装;
输入如下代码:
pip install pandas
显示如下:
(2)读取一个excel文件(以班上同学学习python的成绩作为一个例子)
步骤:在电脑上存有命名为Python成绩的excel 文件。
然后输入代码:
df = pd.read_excel('file:///D:/文档/Python成绩.xlsx', index_col=None,
na_values=['NA']) # 读取excel文件中的数据
利用print检查python是否读取成功,输入:
print(df)
如下显示文件的数据为:
(3)将Excel格式文件转为CSV格式
在上文例子上我们并将优秀改为90,良好改为80,及格改为60,没有交的改0.
输入代码如下:
import pandas as pd grade = pd.read_excel(r"C:\123.xlsx", sheet_name="Sheet1") # filename为excel表格的文件路径 for i in range(len(grade.index)): for j in range(1, len(grade.columns)): if grade.iloc[i, j] == '优秀': grade.iat[i, j] = 90 elif grade.iloc[i, j] == '良好': grade.iat[i, j] = 80 elif grade.iloc[i, j] == '合格': grade.iat[i, j] = 60 else: grade.iat[i, j] = 0 grade.to_csv("12.csv") # csv文件的保存路径
效果如下:
(4)将csv格式文件转化为html格式。
(Hyper Text Markup Language,超文本标记语言) 是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被众多网站用于设计网页、网页应用程序以及移动应用程序的用户界面。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。HTML描述了一个网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言。
输入代码如下:
def fill_data(excel, length=4): ''' 函数功能:填充表格的一行数据,返回html格式的字符串text excel: 表格中的一行数据 length: 表格中需要填充的数据个数(即列数),默认为4个 由于生成csv文件时自动增加了1列数据,因此在format()函数从1开始 ''' text = '<tr>' for i in range(length): tmp = '<td align="center">{}</td>'.format(excel[i+1]) text += tmp text += "</tr>\n" return text def GetCsv(csvFile): ''' 函数功能:打开csv文件并获取数据,返回文件数据 csvFile: csv文件的路径和名称 ''' ls = [] csv = open(csvFile, 'r', encoding="utf-8") for line in csv: line = line.replace('\n', '') ls.append(line.split(',')) return ls def CsvToHtml(csvFile, HTMLFILE, thNum): ''' 函数功能:将csv格式文件转换为html格式文件 csvFile: 需要打开和读取数据的csv文件路径 HTMLFILE: 保存的html文件路径 thNum: csv文件的列数,需注意其中是否包括csv文件第1列无意义的数据, 此处包含因此在调用时需要增加1 ''' # HTML1 HTML2 分别为html文件的首部和尾部 HTML1 = ''' <!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=gbk2313> <h1 align=center>Python成绩表</h2> <table border='blue'>\n''' HTML2 = "</table>\n</body>\n</html>" csv_list = GetCsv(csvFile) # 获得csv文件数据 hF = open(HTMLFILE, 'w') # 创建html文件 hF.write(HTML1) # 写入html文件首部 for i in range(1, thNum+1): # 写入表格的表头(即第1行) hF.write('<th width="20%">{}</th>\n'.format(csv_list[0][i])) hF.write("</tr>\n") for i in range(1, len(csv_list)): # 写入表格的数据,从第2行开始为数据 hF.write(fill_data(csv_list[i], 5)) hF.write(HTML2) # 写入html文件尾部 hF.close() # 关闭html文件 CsvToHtml("D:\12.csv", "D:\1.html", 5)
结果显示为:
3.运用python CGI把上面的csv格式文件,用网页显示并截屏出来。
CGI(Common Gateway Interface)也叫通用网关接口,它是一个web服务器主机提供信息服务的标准接口,只要遵循这个接口,web服务器就能获取客户端提交的信息,转交给服务端的CGI程序进行处理,然后将处理结果返回给客户端。CGI通讯是由两部分组成的:一部分是用户的浏览器显示的页面,也就是html页面,另一部分则是运行在服务器上的CGI程序。
输入代码为:
def fill_data(excel, length=4): ''' 函数功能:填充表格的一行数据,返回html格式的字符串text excel: 表格中的一行数据 length: 表格中需要填充的数据个数(即列数),默认为4个 由于生成csv文件时自动增加了1列数据,因此在format()函数从1开始 ''' text = '<tr>' for i in range(length): tmp = '<td align="center">{}</td>'.format(excel[i+1]) text += tmp text += "</tr>\n" return text def GetCsv(csvFile): ''' 函数功能:打开csv文件并获取数据,返回文件数据 csvFile: csv文件的路径和名称 ''' ls = [] csv = open(csvFile, 'r', encoding="utf-8") for line in csv: line = line.replace('\n', '') ls.append(line.split(',')) return ls def CsvToHtml(csvFile, thNum): ''' csvFile: 需要打开和读取数据的csv文件路径 HTMLFILE: 保存的html文件路径 thNum: csv文件的列数,需注意其中是否包括csv文件第1列无意义的数据, 此处包含因此在调用时需要增加1 ''' csv_list = GetCsv(csvFile) # 获得csv文件数据 print("Content-type:text/html\r\n\r\n") print(''' <!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=gbk2313> <h1 align=center>Python成绩表</h2> <table border='blue'>\n''') # 写html文件首部 for i in range(1, thNum+1): # 写表格的表头(即第1行) print('<th width="20%">{}</th>'.format(csv_list[0][i])) print("</tr>\n") for i in range(1, len(csv_list)): # 写表格的数据,从第2行开始为数据 print(fill_data(csv_list[i], 5)) print("</table>\n</body>\n</html>") # 写html文件尾部 CsvToHtml("D:\wangzhan.csv", 5)
结果为:
网页制作完成!!!!!