文件读写

一、文件读写:

一、打开文件:open函数用来打开文件,语法:open (name, [ , mode[ , buffering]])

open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象,模式(mode)和缓冲(buffering)参数都是可选的。

例:假如有一个名为somefile.txt的文本文件,其存储路径是C:\text(或者在UNIX下的~/text),则可以这样打开文件:

 

f = open(r.'C:\text\somefile.txt')

 

如果文件不存在,则会出现以下异常:

二、关闭文件:使用close方法关闭文件,通常一个文件对象在退出程序后(也可能在退出前)自动关闭,但关闭文件可以避免在某些操作系统或设置中进行无用的修改,也会避免用完系统中所打开文件的配额。

确保文件被关闭了,应使用try / finally语句,并且在finally子句中调用close语句

#Open  your  file  here
try:
    #Write  data  to  your  file
finally:
    file.close()

有专门为这种情况设计的语句,在python2.5中引入,即with语句:

with  Open("somefile.txt")  as  somefile:
    do_something(somefile)

with语句可以打开文件并且将其赋值到变量中,之后就可以将数据写入语句体中的文件(或执行其他的操作),文件在语句结束后会被自动关闭,即便是由于异常引起的结束也是如此。

 

二、读入excel文件,并将其存为csv文件,把优秀改为90分,良好改为80分,及格改为60分,没交的改为0分

import pandas as pd

start=['优秀','良好','合格','不合格']

change=['90分','80分','60分','0分']

file=pd.read_excel("Python grade.xlsx")

l=len(file.index)

for index in range (l):
    for i in range(4):
        file.iloc[index]=file.iloc[index].replace(start[i],change[i])

file.to_csv("Python grade csv.csv",index=False,header=1)

             

 

三、将上述的csv格式的文件转换为html文件(html文件用记事本打开):

seg1='''
<!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=gb>
<h2 align=center>python成绩</h2>
<table border='1' align="center" width=70%>
<tr bgcolor='orange'>\n'''
seg2="</tr>\n"
seg3="</table>\n<body>\n</html>"
def fill_data(locls):
    seg='<st><td align="center">{}</td><td align="center">\
    {}</td><td align="center">{}</td><tdalign="center">\
    {}</td></tr>\n'.format(*locls)
    return seg
fr=open("C:\code_python\Python grade xsxl.csv","rb+")
ls=[]
for line in fr:
    line=line.decode()
    line=line.replace("\n","")
    ls.append(line.split(","))
fr.close()
fw=open("C:\code_python\python grade xsxl.csv.html","w")
fw.write(seg1)
fw.write('''<th width="25%">{}</th>\n<th 
width="25%">{}</th>\n<th width="25%">{}</th>\n<th
 width="25%">{}</th>\n'''.format(*ls[10]))
fw.write(seg2)
for i in range(len(ls)-1):
    fw.write(fill_data(ls[i+1]))
fw.write(seg3)
fw.close()

         

(1、在运行序列化过程中可能会出现的报错:UnicodeDecodeError : ' gbk ' codec  can't  decode  byte  0x80  in  position  0 : illegal  multibyte  sequence:

原因分析:序列化操作时,文件模式不正确,改为“rb+”即可

如:>>>fp = open("a.txt", " r+")

改为:>>>fp = open("a.txt", "rb+") #文件模式为字节处理

2、另外一种报错:TypeError : a  bytes-like  object  is  required, not  'str':

字节流实际上是byte,而不是str,要想把byte变成str需要使用decode()方式,将str变成byte则需要encode()方法

          

 

四、运用python  CGI把上述csv格式文件,用网页显示:

def fill_data(excel, length=4):
    '''
    函数功能:填充表格的一行数据,返回html格式的字符串text
    excel: 表格中的一行数据
    length: 表格中需要填充的数据个数(即列数),默认为4个
    由于生成csv文件时自动增加了1列数据,因此在format()函数从1开始
    '''
    text = '<tr>'
    for i in range(1,length):
        tmp = '<td align="center">{}</td>'.format(excel[i])
        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行)
        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("C:\code_python\Python grade xsxl.csv", 5)

(1、在读取文件的过程中可能会出现报错:IndexError : list  index  out  of  range

这种错误的出现可能有两种原因:第一种:list  [index]  index 超出范围;第二种:list是一个空的,没有元素的列表,进行list[0]就会出现该错误。文件中有空行,删除并重新run一下就可以解决了。

    2、在运行过程中python报错:PermissionError : [Error  13] Permission  denied

这种错误的出现的原因是文件无法打开,可能产生的原因为:文件找不到、或者被占用、或者无权访问、或者打开的不是文件,而是一个目录。

解决:一、检查对应路径下的文件是否存在,且被占用;如果文件不存在,就找到对应文件即可,如果文件存在,被占用,将占用程序暂时关闭

           二、修改cmd的权限,以管理员身份运行

           三、检查是否打开了文件夹  )

posted @ 2020-06-07 10:51  可乐配牛奶  阅读(284)  评论(0编辑  收藏  举报