一、文件的學習。
1、概述。
文件是一個存儲在輔助存儲器上的數據序列,可以包含任何數據內容。概念上,文件是數據的集合和抽象。
2、類型。
文件包括兩種類型:文本文件和二進制文件。
二進制文件和文本文件最主要的區別在於是否有統一的字符編碼。<二進制文件直接由比特0和比特1組成,沒有統一字符編碼>
下面運行代碼直觀感受一下二者的區別:
textFile = open("D:\\桌面\\pytest\\test.txt","rt",encoding="utf-8") #t表示文本文件方式 print(textFile.readline()) textFile.close() binFile = open("D:\\桌面\\pytest\\test.txt","rb") #b表示二進制文件方式 print(binFile.readline()) binFile.close()
結果如下:
世事一場大夢,人生幾度秋涼?
b'\xe4\xb8\x96\xe4\xba\x8b\xe4\xb8\x80\xe5\x9c\xba\xe5\xa4\xa7\xe6\xa2\xa6\xef\xbc\x8c\xe4\xba\xba\xe7\x94\x9f\xe5\x87\xa0\xe5\xba\xa6\xe7\xa7\x8b\xe5\x87\x89\xef\xbc\x9f'
3、方法學習。
(1)open() 方法用於打開一個文件,並返回文件對象,在對文件進行處理過程都需要使用到這個函數,如果該文件無法被打開,會拋出 OSError。
open(file, mode='r')
注意:使用 open() 方法一定要保證關閉文件對象,即調用 close() 方法。
open() 函數常用形式是接收兩個參數:文件名(file)和模式(mode)。
https://www.runoob.com/python/file-methods.html
(I)7種基本的打開模式(mode):
(II)4個常用的文件(file)內容讀取方法:
ps:<file>.readlines()讀入的每一行內容都包括‘\n’字符(即列表中包括‘\n’)如
f = open("D:\\桌面\\pytest\\test.txt", "r",encoding="utf-8") print(f.readlines(1)) f.close()
(III)File 對象的屬性。
屬性 | 描述 |
---|---|
file.closed | 返回true如果文件已被關閉,否則返回false。 |
file.mode | 返回被打開文件的訪問模式。 |
file.name | 返回文件的名稱。 |
測試:
f = open("D:\\桌面\\pytest\\test.txt", "w") print ("文件名: ", f.name) print ("是否已關閉 : ", f.closed) print ("訪問模式 : ", f.mode) f.close() print ("是否已關閉 : ", f.closed)
打印結果:
(2) close() 方法用於關閉一個已打開的文件。關閉后的文件不能再進行讀寫操作, 否則會觸發 ValueError 錯誤。
fileObject.close()
在對文件操作完成后,將文件關閉是對文件的一種尊重,也是對電腦資源的減負。
(3) write()方法 可將任何字符串寫入一個打開的文件。
fileObject.write(string)
注意:Python字符串可以是二進制數據,而不是僅僅是文字。
write()方法不會在字符串的結尾添加換行符('\n')。
4、文件定位。
在讀寫一行字符后,文件操作指針就處於該行的末尾,再次操作也只能對此位置后面的內容進行操作。
比如對一個文件進行追寫(“w+”)操作后------此時操作指針在文件末尾------想讀取追寫后的整個文件,此時用.readlinds()是無效的。
<file>.seek(offset):改變當前文件操作指針的位置,offset含義如下:0 ——到文件開頭;1 ——當前位置;2 ——文件結尾。
二、讀入如下excel文件,並存為csv格式,並把優秀變成90分,良好80分,合格60,不合格0分。(未交的空着)
這里先介紹pandas。pandas是一個Python軟件包,提供快速,靈活和富於表現力的數據結構,旨在使使用“關系”或“標記”數據既簡單又直觀。它是數據處理的一個重要工具。詳細pandas介紹和學習
給出代碼:
import pandas as pd Original = ['優秀','良好','合格','不合格'] Change = ['90分','80分','60分','0分'] f = pd.read_excel("D:\\桌面\\pytest\\Python成績登記信計.xlsx") for index in range(len(f.index)): for i in range(4): f.iloc[index] = f.iloc[index].replace(Original[i],Change[i]) f.to_csv("D:\\桌面\\pytest\\Python成績登記信計.csv",index = False,header=1)
輸出結果如下:
三、把上述csv格式文件轉換為html文件。
pandas提供了完成該轉換的方法。
import pandas as pd fo = pd.read_csv("D:\\桌面\\pytest\\Python成績登記信計.csv") fo.to_html("D:\\桌面\\pytest\\Python成績登記信計.html",index = False,header=1)
截圖如下:
四、運用Python CGI把上面的csv格式文件,用網頁顯示並截屏。
首先要‘連接’,通過該網站指引完成https://baijiahao.baidu.com/s?id=1608396131352808822&wfr=spider&for=pc
成功截圖:
小編不負責任地將前面的html文件,以筆記本方式打開,獲取其HTML代碼。如下:

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

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