文件处理

一、文件读写的读书笔记

1、常见问题:

  写入文件只能写入一行,在循环中将内容写入文件,但是代码在第一次循环中将文件关闭了,所以后边的写不进去,文件读写可能产生IOError为了保证无论是否出错都能正确地关闭文件,我们可以使用

try ... finally来实现:                 

        ft = open("a"'w')

        for entry in result :

            print entry
            try:
                ft.write(entry+' ')
            except:
                  pass
        ft.close()#在内容写完后再关闭文件
 

2.with方法:

      with open('/path/to/file','r') as f:
        print f.read()
 

3.文件小的时候

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
      for line in f.readlines():
        print(line.strip()) # 把末尾的' '删掉

注释:strip

函数原型:s.strip(rm)  删除s字符串中开头、结尾处,位于 rm删除序列的字符

声明:s为字符串,rm为要删除的字符序列

   当rm为空时,默认删除空白符(包括' ', ' ',  ' ',  ' ')

4.把两个路径合成一个时

把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符。

在Linux/Unix/Mac下,os.path.join()返回这样的字符串:

    part-1/part-2

而Windows下会返回这样的字符串:

    part-1part-2

5.拆分路径

要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:

    os.path.splitext()可以直接让你得到文件扩展名

# 对文件重命名:

    os.rename('test.txt', 'test.py')

删掉文件:

    os.remove('test.py')

 1 #使用Python内置的 open()函数,传入文件名和标示符:
 2 f = open('/Users/michael/test.txt', 'r')
 3 
 4 #'r'为标示符,包含:
 5 'r':    默认值,表示从文件读取
 6 'w':    表示要向文件写入数据,并截断以前的内容
 7 'a':    表示要向文件写入数据,添加到当前内容尾部
 8 'r+':   表示对文件进行可读写操作(删除以前的所有数据)
 9 'r+a':  表示对文件可进行读写操作(添加到当前文件尾部)
10 'b':    表示要读写二进制数据
11 
12 #若要读取二进制文件,比如图片、视频等,使用'rb'模式打开文件即可:
13 f = open('/Users/michael/test.jpg', 'rb')
14 f.read()
15     b'xffxd8xffxe1x00x18Exifx00x00...' # 十六进制表示的字节
16 
17 #如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:
18 f.read()
19     'Hello, world!'
20 
21 #最后一步是调用 close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
22 f.close()
23 
24 #为了防止忘记关闭文件导致内存占用,推荐使用with语句来自动帮调用close()方法:
25 with open('/path/to/file', 'r') as f:
26     print(f.read())

二、将excel文件存为csv格式

 将两个excel文件合并为一个excel文件:转换为csv格式,并将里面的优秀变成90分,良好变成80分,及格变成60分,不交变成0分。

 1 # -*- coding: utf-8 -*-
 2 '''
 3 author:一枚小可爱
 4 function:put two excel file into one excel file
 5 
 6 '''
 7 #导入需要使用的包
 8 import xlrd  #读取Excel文件的包
 9 import xlsxwriter   #将文件写入Excel的包
10 
11 import pandas as pd
12 import numpy as np
13 import matplotlib.pyplot as plt
14 
15 #打开一个excel文件
16 def open_xls(file):
17     f = xlrd.open_workbook(file)
18     return f
19 
20 #获取excel中所有的sheet表
21 def getsheet(f):
22     return f.sheets()
23 
24 #获取sheet表的行数
25 def get_Allrows(f,sheet):
26     table=f.sheets()[sheet]
27     return table.nrows
28 
29 #读取文件内容并返回行内容
30 def getFile(file,shnum):
31     f=open_xls(file)
32     table=f.sheets()[shnum]
33     num=table.nrows
34     for row in range(num):
35         rdata=table.row_values(row)
36         datavalue.append(rdata)
37     return datavalue
38 
39 
40 #获取sheet表的个数
41 def getshnum(f):
42     x=0
43     sh=getsheet(f)
44     for sheet in sh:
45         x+=1
46     return x
47 
48 #函数入口
49 if __name__=='__main__':
50     #定义要合并的excel文件列表
51     allxls=['D:我的文件Python课件Python成绩.xlsx','D:我的文件Python课件Python成绩登记信计.xlsx'] #列表中的为要读取文件的路径
52     #存储所有读取的结果
53     datavalue=[]
54     for fl in allxls:
55         f=open_xls(fl)
56         x=getshnum(f)
57         for shnum in range(x):
58             print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")
59             rvalue=getFile(fl,shnum)
60     #定义最终合并后生成的新文件
61     endfile=('D:我的文件Python课件Python成绩(1).xlsx')
62     wbl=xlsxwriter.Workbook(endfile)
63     #创建一个sheet工作对象
64     ws=wbl.add_worksheet()
65     for a in range(len(rvalue)):
66         for b in range(len(rvalue[a])):
67             c=rvalue[a][b]
68             ws.write(a,b,c)
69     wbl.close()
70     print("文件合并完成")

显示如下:

  

将excel文件转换为csv格式,并将里面的优秀变成90分,良好变成80分,及格变成60分,不交变成0分:

 1 # -*- coding: utf-8 -*-
 2 """
 3 author:一枚小可爱
 4 function:put excel file into csv file
 5 
 6 """
 7 import pandas as pd
 8 import numpy as np
 9 import matplotlib.pyplot as plt
10 #df.to_excel('C:/Users/Asus/Desktop/1.xlsx',sheet_name='dfg')
11 df=pd.read_excel('D:/我的文件/Python课件/Python成绩(1).xlsx',index_col=None,na_values=['NA'])
12 print(df)
13 for i in range(len(df.index)):
14    # print(df.iloc[i,1])
15     for j in range(1,len(df.columns)):
16         if df.iloc[i,j]=='优秀':
17             df.iat[i,j]=90
18         elif df.iloc[i,j]=='良好':
19             df.iat[i,j]=80
20         elif df.iloc[i,j]=='合格':
21             df.iat[i,j]=60
22         else:
23             df.iat[i,j]=1
24 df.to_csv('D:/我的文件/Python课件/Python成绩1.csv')
25 print(df)

显示如下:

三、将csv文件转换html文件

 1 # -*- coding:utf-8 
 2 '''
 3 author:一枚小可爱
 4 function:change csv file into html file
 5 
 6 '''
 7 def fill_data(excel, length=4):
 8      '''
 9      函数功能:填充表格的一行数据,返回html格式的字符串text
10      excel: 表格中的一行数据
11      length: 表格中需要填充的数据个数(即列数),默认为4个
12      由于生成csv文件时自动增加了1列数据,因此在format()函数从1开始
13      '''
14      text = '<tr>'
15      for i in range(length):
16          tmp = '<td align="center">{}</td>'.format(excel[i+1])
17          text += tmp
18      text += "</tr>
"
19      return text
20  
21 def GetCsv(csvFile):
22      '''
23      函数功能:打开csv文件并获取数据,返回文件数据
24      csvFile: csv文件的路径和名称
25      '''
26      ls = []
27      csv = open(csvFile, 'r', encoding="utf-8")
28      for line in csv:
29          line = line.replace('
', '')
30          ls.append(line.split(','))
31      return ls
32  
33  
34 def CsvToHtml(csvFile, HTMLFILE, thNum):
35      '''
36        函数功能:将csv格式文件转换为html格式文件
37        csvFile:  需要打开和读取数据的csv文件路径
38        HTMLFILE: 保存的html文件路径
39        thNum:    csv文件的列数,需注意其中是否包括csv文件第1列无意义的数据,
40        此处包含因此在调用时需要增加1
41        '''
42      # HTML1 HTML2 分别为html文件的首部和尾部
43      HTML1 = '''  
44    <!DOCTYPE HTML>
<html>
<body>
<meta charset=gbk2313>
45    <h1 align=center>Python成绩表</h2>
46    <table border='blue'>
'''
47      HTML2 = "</table>
</body>
</html>"
48      
49      csv_list = GetCsv(csvFile)      # 获得csv文件数据
50      hF = open(HTMLFILE, 'w') # 创建html文件
51      hF.write(HTML1)                                             # 写入html文件首部
52      for i in range(1, thNum+1):        # 写入表格的表头(即第1行)
53          hF.write('<th width="20%">{}</th>
'.format(csv_list[0][i]))
54      hF.write("</tr>
")
55      for i in range(1, len(csv_list)):  # 写入表格的数据,从第2行开始为数据
56         hF.write(fill_data(csv_list[i], 5))
57      hF.write(HTML2)                                            # 写入html文件尾部
58      hF.close()               # 关闭html文件
59  
60 CsvToHtml("D:/我的文件/Python课件/Python成绩1.csv", "D:/我的文件/Python课件/Python成绩11.html", 5)

显示如下:

四、将csv文件转换成json格式

代码实现:

 1 import json
 2 fr=open("D:/我的文件/Python课件/Python成绩1.csv","r")
 3 ls=[]
 4 for line in fr:
 5     line=line.replace("
","")
 6     ls.append(line.spilt(','))
 7 fr.close
 8 fw=open("D:/我的文件/Python课件/Python成绩2.json","w")
 9 for i in range(1,len(ls)):
10     ls[i]=dict(zip(ls[0]),ls[i])
11 json.dump(ls[1:],fw,sort_keys=True,indent=4,ensure_ascii=False)
12 fw.close

实现如下:

 

五、运用Python CGI 把上面csv文件用网页显示

原文地址:https://www.cnblogs.com/sun0618-/p/10784451.html