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