文件是一個(gè)存儲(chǔ)在輔助存儲(chǔ)器上的數(shù)據(jù)序列,可以包含任何數(shù)據(jù)內(nèi)容,其中包括兩種類型:文本文件和二進(jìn)制文件。文件讀寫是Python代碼調(diào)用電腦文件的主要功能,能被用于讀取和寫入文本記錄、音頻片段、Excel文檔、保存郵件以及任何保存在電腦上的東西。 ? 文件讀寫 一、文件的打開(Python對(duì)文本文件和二進(jìn)制文件采用統(tǒng)一的操作步驟,即“打開-操作-關(guān)閉”。) ? (1)通過解釋器內(nèi)置的open()函數(shù)打開一個(gè)文件,并實(shí)現(xiàn)該文件與一個(gè)程序變量的關(guān)聯(lián),open()函數(shù)格式如下: <變量名> = open(<文件路徑>, <打開模式>) ? ?可以看到,open()函數(shù)有兩個(gè)參數(shù):
絕對(duì)路徑就是文件最完整的路徑,相對(duì)路徑就是相對(duì)于當(dāng)前文件夾的路徑,當(dāng)前文件夾就是你編寫的這個(gè)py文件所放的文件夾。如果你要打開的文件和open.py在同一個(gè)文件夾里,這時(shí)只要使用相對(duì)路徑就行了,而要使用其他文件夾的文件則需使用絕對(duì)路徑。 ? 不過需要注意的是:\在Python中是轉(zhuǎn)義字符,所以時(shí)常會(huì)有沖突。為了避坑,Windows的絕對(duì)路徑通常要稍作處理,寫成以下兩種形式: 1 open('C:\\Users\\Administrator\\Desktop\\test\\abc.txt') 2 #將'\'替換成'\\' 3 4 open(r'C:\Users\Administrator\Desktop\test\abc.txt') 5 #在路徑前加上字母r ?
? ? 如果想要讀取或者寫入的數(shù)據(jù)不是文本內(nèi)容,而是音頻和圖片,可以使用‘rb’模式或者‘wb’模式,因?yàn)閳D片和音頻是以二進(jìn)制的形式保存的。 ? (2)為了避免打開文件后忘記關(guān)閉,占用資源或當(dāng)不能確定關(guān)閉文件的恰當(dāng)時(shí)機(jī)的時(shí)候,我們可以用到關(guān)鍵字with,例如: ? 1 #使用open()函數(shù) 2 f = open('abc.txt', 'a') 3 f.write('abc') 4 f.close() 5 6 #使用關(guān)鍵字with 7 #with open('文件地址','讀寫模式') as 變量名: 8 9 with open('abc.txt', 'a') as: #注意冒號(hào):不能丟, 而且對(duì)文件進(jìn)行操作時(shí)需要縮進(jìn) 10 f.write('abc') 11 12 #無(wú)需用close()關(guān)閉 ? 二、文件的讀取 Python提供4個(gè)常用的文件內(nèi)容讀取方法: ? ?? 對(duì)文件的讀取操作需要將文件中的數(shù)據(jù)加載到內(nèi)存中,而上面所用到的read()方法會(huì)一次性把文件中所有的內(nèi)容全部加載到內(nèi)存中,當(dāng)遇到一個(gè)非常大的文件時(shí),會(huì)很容易把內(nèi)存消耗完,顯然是不合理的。所以在讀取文件時(shí),通常采用下面兩種方法,對(duì)文件內(nèi)容進(jìn)行逐行處理: 1 #使用readlines()函數(shù) 2 f = open('abc.txt', 'r') 3 for line in f.readlines(): 4 #處理一行數(shù)據(jù) 5 f.close() 6 7 #直接遍歷文件 8 f = open('abc.txt', 'r') 9 for line in f: 10 #處理一行數(shù)據(jù) 11 f.close() ? 三、文件的寫入 Python提供3個(gè)與文件內(nèi)容寫入有關(guān)的方法: 例子如下: 1 ls = ['a', 'b','c'] 2 with open('abc.txt', 'w ') as f: 3 f.writelines(ls) #使用writelines()函數(shù)后,文件指針會(huì)指在寫入內(nèi)容的后面 4 f.seek(0) #使用seek()函數(shù),將文件指針返回文件開頭.如果把這行代碼注釋掉,后面將不會(huì)打印出寫入的內(nèi)容 5 for line in f: 6 print(line) ? 讀取excel文件,修改并存為csv文件
需要讀入上面的Excel表格,并且將優(yōu)秀改為90分,良好80分,合格60,不合格0分,最后存為csv文件。如圖可以看到這個(gè)表格的數(shù)據(jù)不是很整齊,下面我會(huì)使用pandas庫(kù)處理這個(gè)Excel表格。(pandas庫(kù)的簡(jiǎn)單使用) ? (1)將原表格處理一下 1 import pandas as pd 2 df = pd.read_excel("Python成績(jī)登記信計(jì).xlsx", header=1) #讀入excel文件,創(chuàng)建DataFrame實(shí)例 3 df.columns = ['序號(hào)','一','二','三','四'] #人為設(shè)置columns,就是每一列的名字 4 df.set_index('序號(hào)', inplace = True) #因?yàn)镈ataFrame有自己的默認(rèn)索引,這里設(shè)置'序號(hào)'作為索引 5 df.to_excel("newexcel.xlsx") #保存為新的Excel文件 ? 得到的新表格如下: ?? (2)修改excel數(shù)據(jù),并存為csv文件 1 import pandas as pd 2 df = pd.read_excel("newexcel.xlsx") 3 chg = {'優(yōu)秀':'90','良好':'80','合格':'60','不合格':'0'} #創(chuàng)建一個(gè)對(duì)應(yīng)成績(jī)的字典 4 Grade = df.columns.values[1:] #取出每一列數(shù)據(jù)的列名 5 for col in Grade: 6 for i in chg: 7 df[col][df[col] == i] = chg[i] #找到col表示的列名的那一列,在該列進(jìn)行比較 8 df.to_csv("newcsv.csv", index = False, header = True) #保存為csv文件 ? 得到的csv文件如下: ? 將csv格式文件轉(zhuǎn)換成html文件 pandas庫(kù)的DataFrame類提供了比較簡(jiǎn)單的保存為html文件的方法,如下: 1 import pandas as pd 2 df = pd.read_csv("newcsv.csv") #讀入csv文件,創(chuàng)建一個(gè)DataFrame實(shí)例 3 df.to_html("newhtml.html", index = False, header = True) #保存為html格式文件
打開該html文件后,效果如: ? ? 運(yùn)用Python CGI將上面的csv格式文件在網(wǎng)頁(yè)上顯示 由于接下來(lái)需要用到CGI的知識(shí),所以我這里給出簡(jiǎn)單學(xué)習(xí)CGI的鏈接。(Python CGI安裝教程及簡(jiǎn)單使用、修改httpd.conf文件參考教程) ? 安裝以及配置完Apache之后,我將我完成的html文件放入文件夾Apache24/htdocs中,用記事本的形式打開這個(gè)html文件,得到: 1 <table border="1" class="dataframe"> 2 <thead> 3 <tr style="text-align: right;"> 4 <th>序號(hào)</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 ? 打開網(wǎng)頁(yè),輸入http://localhost/newhtml.html,發(fā)現(xiàn)網(wǎng)頁(yè)出現(xiàn)中文亂碼,如下: ? 接著我在百度找到了解決方法,并且對(duì)這個(gè)html進(jìn)行了修改,修改為: ? 1 <html><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 2 <title>2017中國(guó)最好大學(xué)排名</title> 3 <head><b>2017中國(guó)最好大學(xué)排名</b></head><br></br> 4 <table border="1" class="dataframe"> 5 <thead> 6 <tr style="text-align: right;"> 7 <th>序號(hào)</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 ? 最后結(jié)果為: ? ?? 來(lái)源:https://www./content-1-703551.html |
|