自己的第一个网页

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)

结果为:

自己的第一个网页

 

网页制作完成!!!!!