一、文件读写

以只读方式打开

rU或U

以读方式打开,同时提供通用换行符支持

w

以写方式打开,如果文件已经存在,会覆盖掉原来的数据

以追加模式打开,在文件后面追加数据,不能读

r+

以读写模式打开

w+

以读写模式打开,参见w

a+

以读写追加模式打开,参见a

rb

以二进制读模式打开

wb

以二进制写模式打开

ab

以二进制追加模式打开

rb+

以二进制读写模式打开

 

wb+

以二进制读写模式打开

 

ab+

以二进制读写追加模式打开

 

二、读取文件中的数据

* 使用read方法一次性读取所有的数据使用,包括换行符

* 使用readline方法每次只读取一行数据,包括换行符

* 使用readlines方法一次性读取完所有数据,包括换行符,并以列表的形式返回,列表中的每个元素就是原文件的一行

* 使用for循环迭代读取

* 使用列表推导式来将文件的每一行都读取到列表中去

 

三、xlsx文件转换为cvs文件

 

(一)Pandas简介

 

1、Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

 

2、Pandas 是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。

 

3、数据结构:

 

Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。

 

Time- Series:以时间为索引的Series。

 

DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。

 

Panel :三维的数组,可以理解为DataFrame的容器。

 

Pandas 有两种自己独有的基本数据结构。读者应该注意的是,它固然有着两种数据结构,因为它依然是 Python 的一个库,所以,Python 中有的数据类型在这里依然适用,也同样还可以使用类自己定义数据类型。只不过,Pandas 里面又定义了两种数据类型:Series 和 DataFrame,它们让数据操作更简单了。

 

import pandas as pd
df = pd.read_excel('Python成绩登记信计.xlsx')#读写文件
da = df.to_csv('E:\Anaconda之作业\Python成绩登记信计.csv')#更改xlsx文件为csv文件
da = pd.read_csv('E:\Anaconda之作业\Python成绩登记信计.csv',index_col=0)#读取文件
da = da.replace('优秀','90')   #替换数据
da = da.replace('良好','80')
da = da.replace('合格','60')
da = da.replace('不合格','10')
da = da.fillna(0)
print(da)
dc = da.to_csv('E:\Anaconda之作业\Python成绩登记信计.csv')#保存csv文件

如下图所示效果

 

 

 

四、更改csv文件为html文件

 

seg1 = '''
<!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=utf-8>
<h1 align=center>Python成绩登记信计</h1>
<table border='1' align="center" width=100%>
<tr bgcolor='yellow'>\n'''
#创建一个HTML文件表格,包括标题,宽度
seg2="</tr>\n"
seg3="</table>\n</body>\n</html>"
def fill_data(locls):#创建表格内容
    seg = '<tr><td align="center">{}</td><td align="center">\
    {}</td><td align="center">{}</td><td align="center">\
    {}</td ><td align="center">{}</td></tr><td align="center">{}</td></tr>\n'.format(*locls)
    return seg
fr = open("E:\Anaconda之作业\Python成绩登记信计.csv","r",encoding='utf-8')#打开文件
ls = []
for line in fr:#将文件内容导入表格
    line = line.replace("\n","")
    ls.append(line.split(","))#去除逗号分隔符
print(ls)
fr.close()#关闭文件
fw = open("E:\Anaconda之作业\Python成绩登记信计.html","w",encoding='utf-8')#操作HTML文件
fw.write(seg1)
fw.write('<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n'.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#关闭并保存文件

 效果如下

 

大功告成,注意charset=utf-8是指html文件的编码语言,一定要好好核对,文件打开的编码一定要适合该文件或编程语言,不然就会出错。

 

posted on 2019-05-08 23:03  em对的  阅读(1803)  评论(0编辑  收藏  举报