zoukankan      html  css  js  c++  java
  • 文件读写

    一、文件读写:

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

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

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

    f = open(r.'C:	extsomefile.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>
    <html>
    <body>
    <meta charset=gb>
    <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='<st><td align="center">{}</td><td align="center">
        {}</td><td align="center">{}</td><tdalign="center">
        {}</td></tr>
    '.format(*locls)
        return seg
    fr=open("C:code_pythonPython grade xsxl.csv","rb+")
    ls=[]
    for line in fr:
        line=line.decode()
        line=line.replace("
    ","")
        ls.append(line.split(","))
    fr.close()
    fw=open("C:code_pythonpython grade xsxl.csv.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[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>
    "
        return text
    
    def GetCsv(csvFile):
        '''
        函数功能:打开csv文件并获取数据,返回文件数据
        csvFile: csv文件的路径和名称
        '''
        ls = []
        csv = open(csvFile, 'r', encoding="utf-8")
        for line in csv:
            line = line.replace('
    ', '')
            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
    
    ")
        print('''
    <!DOCTYPE HTML>
    <html>
    <body>
    <meta charset=gbk2313>
    <h1 align=center>Python成绩表</h2>
    <table border='blue'>
    ''')             # 写html文件首部
        for i in range(1, thNum):         # 写表格的表头(即第1行)
            print('<th width="20%">{}</th>'.format(csv_list[0][i]))
        print("</tr>
    ")
        for i in range(1, len(csv_list)):   # 写表格的数据,从第2行开始为数据
            print(fill_data(csv_list[i], 5))
        print("</table>
    </body>
    </html>") # 写html文件尾部
    
    CsvToHtml("C:code_pythonPython 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的权限,以管理员身份运行

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

  • 相关阅读:
    反思 自学困境自我剖析、习惯的惯性与维持
    Java IO 节点流 FileInput/OutputStream
    Java IO 理解流的概念
    spring boot2.1读取 apollo 配置中心1
    saga+.net core 分布式事务处理
    npm install 报错 ECONNREFUSED
    读书笔记: Microsot .NET企业级应用架构设计
    Dockerfile 设置语言包
    Centos环境下,执行gulp,显示执行成功,但找到不生成的压缩文件
    Jenkins Pipeline shell脚本用svn_revision当做系统版本号
  • 原文地址:https://www.cnblogs.com/cnn-ljc/p/12953470.html
Copyright © 2011-2022 走看看