ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文件读写

2020-06-07 10:52:25  阅读:200  来源: 互联网

标签:文件 text 读写 ls line csv open


一、文件读写:

一、打开文件: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)

标签:文件,text,读写,ls,line,csv,open
来源: https://www.cnblogs.com/cnn-ljc/p/12953470.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有