Python 之 文件读写的学习

  文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容,其中包括两种类型:文本文件和二进制文件。文件读写是Python代码调用电脑文件的主要功能,能被用于读取和写入文本记录、音频片段、Excel文档、保存邮件以及任何保存在电脑上的东西。

 

文件读写

一、文件的打开(Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”。)

 

(1)通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量的关联,open()函数格式如下:

<变量名> = open(<文件路径>, <打开模式>)

 

 可以看到,open()函数有两个参数:

  • 文件的保存地址:文件的地址有两种,绝对路径和相对路径。

  绝对路径就是文件最完整的路径,相对路径就是相对于当前文件夹的路径,当前文件夹就是你编写的这个py文件所放的文件夹。如果你要打开的文件和open.py在同一个文件夹里,这时只要使用相对路径就行了,而要使用其他文件夹的文件则需使用绝对路径。

 

不过需要注意的是:\在Python中是转义字符,所以时常会有冲突。为了避坑,Windows的绝对路径通常要稍作处理,写成以下两种形式:

1 open('C:\\Users\\Administrator\\Desktop\\test\\abc.txt')
2 #将'\'替换成'\\'
3 
4 open(r'C:\Users\Administrator\Desktop\test\abc.txt')
5 #在路径前加上字母r

 

  • 打开文件时的模式:open()函数提供7种基本的打开模式。

 

 

  如果想要读取或者写入的数据不是文本内容,而是音频和图片,可以使用‘rb’模式或者‘wb’模式,因为图片和音频是以二进制的形式保存的。

 

(2)为了避免打开文件后忘记关闭,占用资源或当不能确定关闭文件的恰当时机的时候,我们可以用到关键字with,例如:

 

 1 #使用open()函数
 2 f = open('abc.txt', 'a')
 3 f.write('abc')
 4 f.close()
 5 
 6 #使用关键字with
 7 #with open('文件地址','读写模式') as 变量名:
 8 
 9 with open('abc.txt', 'a') as:        #注意冒号:不能丢, 而且对文件进行操作时需要缩进
10     f.write('abc')
11 
12 #无需用close()关闭

 

二、文件的读取

  Python提供4个常用的文件内容读取方法:

 

    对文件的读取操作需要将文件中的数据加载到内存中,而上面所用到的read()方法会一次性把文件中所有的内容全部加载到内存中,当遇到一个非常大的文件时,会很容易把内存消耗完,显然是不合理的。所以在读取文件时,通常采用下面两种方法,对文件内容进行逐行处理:

 1 #使用readlines()函数
 2 f = open('abc.txt', 'r')
 3 for line in f.readlines():
 4     #处理一行数据
 5 f.close()
 6 
 7 #直接遍历文件
 8 f = open('abc.txt', 'r')
 9 for line in f:
10     #处理一行数据
11 f.close()

 

三、文件的写入

  Python提供3个与文件内容写入有关的方法:

例子如下:

1 ls = ['a', 'b','c']
2 with open('abc.txt', 'w+') as f:
3     f.writelines(ls)        #使用writelines()函数后,文件指针会指在写入内容的后面
4     f.seek(0)               #使用seek()函数,将文件指针返回文件开头.如果把这行代码注释掉,后面将不会打印出写入的内容
5     for line in f:
6         print(line)

 

读取excel文件,修改并存为csv文件  

  需要读入上面的Excel表格,并且将优秀改为90分,良好80分,合格60,不合格0分,最后存为csv文件。如图可以看到这个表格的数据不是很整齐,下面我会使用pandas库处理这个Excel表格。(pandas库的简单使用

 

(1)将原表格处理一下

1 import pandas as pd
2 df = pd.read_excel("Python成绩登记信计.xlsx", header=1)                 #读入excel文件,创建DataFrame实例
3 df.columns = ['序号','','','','']                               #人为设置columns,就是每一列的名字
4 df.set_index('序号', inplace = True)                                   #因为DataFrame有自己的默认索引,这里设置'序号'作为索引
5 df.to_excel("newexcel.xlsx")                                          #保存为新的Excel文件

 

得到的新表格如下:

  

(2)修改excel数据,并存为csv文件

1 import pandas as pd
2 df = pd.read_excel("newexcel.xlsx")
3 chg = {'优秀':'90','良好':'80','合格':'60','不合格':'0'}                 #创建一个对应成绩的字典
4 Grade = df.columns.values[1:]                                          #取出每一列数据的列名
5 for col in Grade:                               
6     for i in chg:
7         df[col][df[col] == i] = chg[i]                                 #找到col表示的列名的那一列,在该列进行比较
8 df.to_csv("newcsv.csv", index = False, header = True)                  #保存为csv文件

 

得到的csv文件如下:

 

将csv格式文件转换成html文件

  pandas库的DataFrame类提供了比较简单的保存为html文件的方法,如下:

1 import pandas as pd
2 df = pd.read_csv("newcsv.csv")                                          #读入csv文件,创建一个DataFrame实例
3 df.to_html("newhtml.html", index = False, header = True)                #保存为html格式文件

  

  打开该html文件后,效果如:

 

 

运用Python CGI将上面的csv格式文件在网页上显示

  由于接下来需要用到CGI的知识,所以我这里给出简单学习CGI的链接。(Python CGI安装教程及简单使用修改httpd.conf文件参考教程

 

  安装以及配置完Apache之后,我将我完成的html文件放入文件夹Apache24/htdocs中,用记事本的形式打开这个html文件,得到:

  1 <table border="1" class="dataframe">
  2   <thead>
  3     <tr style="text-align: right;">
  4       <th>序号</th>
  5       <th></th>
  6       <th></th>
  7       <th></th>
  8       <th></th>
  9     </tr>
 10   </thead>
 11   <tbody>
 12     <tr>
 13       <td>1</td>
 14       <td>0.0</td>
 15       <td>90.0</td>
 16       <td>80.0</td>
 17       <td>80.0</td>
 18     </tr>
 19     <tr>
 20       <td>2</td>
 21       <td>90.0</td>
 22       <td>90.0</td>
 23       <td>90.0</td>
 24       <td>90.0</td>
 25     </tr>
 26     <tr>
 27       <td>3</td>
 28       <td>60.0</td>
 29       <td>90.0</td>
 30       <td>80.0</td>
 31       <td>80.0</td>
 32     </tr>
 33     <tr>
 34       <td>4</td>
 35       <td>0.0</td>
 36       <td>90.0</td>
 37       <td>90.0</td>
 38       <td>80.0</td>
 39     </tr>
 40     <tr>
 41       <td>5</td>
 42       <td>90.0</td>
 43       <td>90.0</td>
 44       <td>80.0</td>
 45       <td>90.0</td>
 46     </tr>
 47     <tr>
 48       <td>6</td>
 49       <td>90.0</td>
 50       <td>90.0</td>
 51       <td>90.0</td>
 52       <td>80.0</td>
 53     </tr>
 54     <tr>
 55       <td>7</td>
 56       <td>90.0</td>
 57       <td>90.0</td>
 58       <td>80.0</td>
 59       <td>90.0</td>
 60     </tr>
 61     <tr>
 62       <td>8</td>
 63       <td>90.0</td>
 64       <td>90.0</td>
 65       <td>80.0</td>
 66       <td>80.0</td>
 67     </tr>
 68     <tr>
 69       <td>9</td>
 70       <td>90.0</td>
 71       <td>90.0</td>
 72       <td>80.0</td>
 73       <td>90.0</td>
 74     </tr>
 75     <tr>
 76       <td>10</td>
 77       <td>90.0</td>
 78       <td>90.0</td>
 79       <td>90.0</td>
 80       <td>90.0</td>
 81     </tr>
 82     <tr>
 83       <td>11</td>
 84       <td>90.0</td>
 85       <td>90.0</td>
 86       <td>90.0</td>
 87       <td>90.0</td>
 88     </tr>
 89     <tr>
 90       <td>12</td>
 91       <td>90.0</td>
 92       <td>90.0</td>
 93       <td>90.0</td>
 94       <td>90.0</td>
 95     </tr>
 96     <tr>
 97       <td>13</td>
 98       <td>80.0</td>
 99       <td>60.0</td>
100       <td>90.0</td>
101       <td>90.0</td>
102     </tr>
103     <tr>
104       <td>14</td>
105       <td>60.0</td>
106       <td>90.0</td>
107       <td>80.0</td>
108       <td>80.0</td>
109     </tr>
110     <tr>
111       <td>15</td>
112       <td>80.0</td>
113       <td>90.0</td>
114       <td>80.0</td>
115       <td>80.0</td>
116     </tr>
117     <tr>
118       <td>16</td>
119       <td>0.0</td>
120       <td>0.0</td>
121       <td>0.0</td>
122       <td>0.0</td>
123     </tr>
124     <tr>
125       <td>17</td>
126       <td>90.0</td>
127       <td>90.0</td>
128       <td>90.0</td>
129       <td>90.0</td>
130     </tr>
131     <tr>
132       <td>18</td>
133       <td>90.0</td>
134       <td>90.0</td>
135       <td>90.0</td>
136       <td>90.0</td>
137     </tr>
138     <tr>
139       <td>19</td>
140       <td>90.0</td>
141       <td>90.0</td>
142       <td>90.0</td>
143       <td>90.0</td>
144     </tr>
145     <tr>
146       <td>20</td>
147       <td>90.0</td>
148       <td>60.0</td>
149       <td>90.0</td>
150       <td>80.0</td>
151     </tr>
152     <tr>
153       <td>21</td>
154       <td>60.0</td>
155       <td>60.0</td>
156       <td>90.0</td>
157       <td>80.0</td>
158     </tr>
159     <tr>
160       <td>22</td>
161       <td>60.0</td>
162       <td>90.0</td>
163       <td>90.0</td>
164       <td>80.0</td>
165     </tr>
166     <tr>
167       <td>23</td>
168       <td>90.0</td>
169       <td>90.0</td>
170       <td>90.0</td>
171       <td>60.0</td>
172     </tr>
173     <tr>
174       <td>24</td>
175       <td>90.0</td>
176       <td>90.0</td>
177       <td>90.0</td>
178       <td>0.0</td>
179     </tr>
180     <tr>
181       <td>25</td>
182       <td>80.0</td>
183       <td>90.0</td>
184       <td>90.0</td>
185       <td>90.0</td>
186     </tr>
187     <tr>
188       <td>26</td>
189       <td>80.0</td>
190       <td>90.0</td>
191       <td>90.0</td>
192       <td>90.0</td>
193     </tr>
194     <tr>
195       <td>27</td>
196       <td>90.0</td>
197       <td>90.0</td>
198       <td>90.0</td>
199       <td>90.0</td>
200     </tr>
201     <tr>
202       <td>28</td>
203       <td>90.0</td>
204       <td>0.0</td>
205       <td>90.0</td>
206       <td>80.0</td>
207     </tr>
208     <tr>
209       <td>29</td>
210       <td>90.0</td>
211       <td>90.0</td>
212       <td>90.0</td>
213       <td>90.0</td>
214     </tr>
215     <tr>
216       <td>30</td>
217       <td>90.0</td>
218       <td>80.0</td>
219       <td>90.0</td>
220       <td>90.0</td>
221     </tr>
222     <tr>
223       <td>31</td>
224       <td>80.0</td>
225       <td>90.0</td>
226       <td>90.0</td>
227       <td>80.0</td>
228     </tr>
229     <tr>
230       <td>32</td>
231       <td>90.0</td>
232       <td>90.0</td>
233       <td>90.0</td>
234       <td>80.0</td>
235     </tr>
236     <tr>
237       <td>33</td>
238       <td>90.0</td>
239       <td>60.0</td>
240       <td>90.0</td>
241       <td>0.0</td>
242     </tr>
243     <tr>
244       <td>34</td>
245       <td>90.0</td>
246       <td>90.0</td>
247       <td>90.0</td>
248       <td>80.0</td>
249     </tr>
250     <tr>
251       <td>35</td>
252       <td>90.0</td>
253       <td>90.0</td>
254       <td>90.0</td>
255       <td>80.0</td>
256     </tr>
257     <tr>
258       <td>36</td>
259       <td>80.0</td>
260       <td>90.0</td>
261       <td>90.0</td>
262       <td>90.0</td>
263     </tr>
264     <tr>
265       <td>37</td>
266       <td>60.0</td>
267       <td>80.0</td>
268       <td>80.0</td>
269       <td>80.0</td>
270     </tr>
271     <tr>
272       <td>38</td>
273       <td>80.0</td>
274       <td>90.0</td>
275       <td>90.0</td>
276       <td>80.0</td>
277     </tr>
278     <tr>
279       <td>39</td>
280       <td>NaN</td>
281       <td>NaN</td>
282       <td>NaN</td>
283       <td>NaN</td>
284     </tr>
285     <tr>
286       <td>40</td>
287       <td>NaN</td>
288       <td>NaN</td>
289       <td>NaN</td>
290       <td>NaN</td>
291     </tr>
292   </tbody>
293 </table>
View Code

   

  打开网页,输入http://localhost/newhtml.html,发现网页出现中文乱码,如下:

 

  接着我在百度找到了解决方法,并且对这个html进行了修改,修改为:

  1 <html><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  2 <title>成绩登记表</title>
  3 <head><b>成绩登记表</b></head><br></br>
  4 <table border="1" class="dataframe">
  5   <thead>
  6     <tr style="text-align: right;">
  7       <th>序号</th>
  8       <th></th>
  9       <th></th>
 10       <th></th>
 11       <th></th>
 12     </tr>
 13   </thead>
 14   <tbody>
 15     <tr>
 16       <td>1</td>
 17       <td>0.0</td>
 18       <td>90.0</td>
 19       <td>80.0</td>
 20       <td>80.0</td>
 21     </tr>
 22     <tr>
 23       <td>2</td>
 24       <td>90.0</td>
 25       <td>90.0</td>
 26       <td>90.0</td>
 27       <td>90.0</td>
 28     </tr>
 29     <tr>
 30       <td>3</td>
 31       <td>60.0</td>
 32       <td>90.0</td>
 33       <td>80.0</td>
 34       <td>80.0</td>
 35     </tr>
 36     <tr>
 37       <td>4</td>
 38       <td>0.0</td>
 39       <td>90.0</td>
 40       <td>90.0</td>
 41       <td>80.0</td>
 42     </tr>
 43     <tr>
 44       <td>5</td>
 45       <td>90.0</td>
 46       <td>90.0</td>
 47       <td>80.0</td>
 48       <td>90.0</td>
 49     </tr>
 50     <tr>
 51       <td>6</td>
 52       <td>90.0</td>
 53       <td>90.0</td>
 54       <td>90.0</td>
 55       <td>80.0</td>
 56     </tr>
 57     <tr>
 58       <td>7</td>
 59       <td>90.0</td>
 60       <td>90.0</td>
 61       <td>80.0</td>
 62       <td>90.0</td>
 63     </tr>
 64     <tr>
 65       <td>8</td>
 66       <td>90.0</td>
 67       <td>90.0</td>
 68       <td>80.0</td>
 69       <td>80.0</td>
 70     </tr>
 71     <tr>
 72       <td>9</td>
 73       <td>90.0</td>
 74       <td>90.0</td>
 75       <td>80.0</td>
 76       <td>90.0</td>
 77     </tr>
 78     <tr>
 79       <td>10</td>
 80       <td>90.0</td>
 81       <td>90.0</td>
 82       <td>90.0</td>
 83       <td>90.0</td>
 84     </tr>
 85     <tr>
 86       <td>11</td>
 87       <td>90.0</td>
 88       <td>90.0</td>
 89       <td>90.0</td>
 90       <td>90.0</td>
 91     </tr>
 92     <tr>
 93       <td>12</td>
 94       <td>90.0</td>
 95       <td>90.0</td>
 96       <td>90.0</td>
 97       <td>90.0</td>
 98     </tr>
 99     <tr>
100       <td>13</td>
101       <td>80.0</td>
102       <td>60.0</td>
103       <td>90.0</td>
104       <td>90.0</td>
105     </tr>
106     <tr>
107       <td>14</td>
108       <td>60.0</td>
109       <td>90.0</td>
110       <td>80.0</td>
111       <td>80.0</td>
112     </tr>
113     <tr>
114       <td>15</td>
115       <td>80.0</td>
116       <td>90.0</td>
117       <td>80.0</td>
118       <td>80.0</td>
119     </tr>
120     <tr>
121       <td>16</td>
122       <td>0.0</td>
123       <td>0.0</td>
124       <td>0.0</td>
125       <td>0.0</td>
126     </tr>
127     <tr>
128       <td>17</td>
129       <td>90.0</td>
130       <td>90.0</td>
131       <td>90.0</td>
132       <td>90.0</td>
133     </tr>
134     <tr>
135       <td>18</td>
136       <td>90.0</td>
137       <td>90.0</td>
138       <td>90.0</td>
139       <td>90.0</td>
140     </tr>
141     <tr>
142       <td>19</td>
143       <td>90.0</td>
144       <td>90.0</td>
145       <td>90.0</td>
146       <td>90.0</td>
147     </tr>
148     <tr>
149       <td>20</td>
150       <td>90.0</td>
151       <td>60.0</td>
152       <td>90.0</td>
153       <td>80.0</td>
154     </tr>
155     <tr>
156       <td>21</td>
157       <td>60.0</td>
158       <td>60.0</td>
159       <td>90.0</td>
160       <td>80.0</td>
161     </tr>
162     <tr>
163       <td>22</td>
164       <td>60.0</td>
165       <td>90.0</td>
166       <td>90.0</td>
167       <td>80.0</td>
168     </tr>
169     <tr>
170       <td>23</td>
171       <td>90.0</td>
172       <td>90.0</td>
173       <td>90.0</td>
174       <td>60.0</td>
175     </tr>
176     <tr>
177       <td>24</td>
178       <td>90.0</td>
179       <td>90.0</td>
180       <td>90.0</td>
181       <td>0.0</td>
182     </tr>
183     <tr>
184       <td>25</td>
185       <td>80.0</td>
186       <td>90.0</td>
187       <td>90.0</td>
188       <td>90.0</td>
189     </tr>
190     <tr>
191       <td>26</td>
192       <td>80.0</td>
193       <td>90.0</td>
194       <td>90.0</td>
195       <td>90.0</td>
196     </tr>
197     <tr>
198       <td>27</td>
199       <td>90.0</td>
200       <td>90.0</td>
201       <td>90.0</td>
202       <td>90.0</td>
203     </tr>
204     <tr>
205       <td>28</td>
206       <td>90.0</td>
207       <td>0.0</td>
208       <td>90.0</td>
209       <td>80.0</td>
210     </tr>
211     <tr>
212       <td>29</td>
213       <td>90.0</td>
214       <td>90.0</td>
215       <td>90.0</td>
216       <td>90.0</td>
217     </tr>
218     <tr>
219       <td>30</td>
220       <td>90.0</td>
221       <td>80.0</td>
222       <td>90.0</td>
223       <td>90.0</td>
224     </tr>
225     <tr>
226       <td>31</td>
227       <td>80.0</td>
228       <td>90.0</td>
229       <td>90.0</td>
230       <td>80.0</td>
231     </tr>
232     <tr>
233       <td>32</td>
234       <td>90.0</td>
235       <td>90.0</td>
236       <td>90.0</td>
237       <td>80.0</td>
238     </tr>
239     <tr>
240       <td>33</td>
241       <td>90.0</td>
242       <td>60.0</td>
243       <td>90.0</td>
244       <td>0.0</td>
245     </tr>
246     <tr>
247       <td>34</td>
248       <td>90.0</td>
249       <td>90.0</td>
250       <td>90.0</td>
251       <td>80.0</td>
252     </tr>
253     <tr>
254       <td>35</td>
255       <td>90.0</td>
256       <td>90.0</td>
257       <td>90.0</td>
258       <td>80.0</td>
259     </tr>
260     <tr>
261       <td>36</td>
262       <td>80.0</td>
263       <td>90.0</td>
264       <td>90.0</td>
265       <td>90.0</td>
266     </tr>
267     <tr>
268       <td>37</td>
269       <td>60.0</td>
270       <td>80.0</td>
271       <td>80.0</td>
272       <td>80.0</td>
273     </tr>
274     <tr>
275       <td>38</td>
276       <td>80.0</td>
277       <td>90.0</td>
278       <td>90.0</td>
279       <td>80.0</td>
280     </tr>
281     <tr>
282       <td>39</td>
283       <td>NaN</td>
284       <td>NaN</td>
285       <td>NaN</td>
286       <td>NaN</td>
287     </tr>
288     <tr>
289       <td>40</td>
290       <td>NaN</td>
291       <td>NaN</td>
292       <td>NaN</td>
293       <td>NaN</td>
294     </tr>
295   </tbody>
296 </table>
297 </html>
View Code

 

  最后结果为:

 

 

 

  

posted @ 2020-06-01 23:39  Lincoln_H  阅读(329)  评论(0编辑  收藏  举报