python的文件讀寫

1、python文件讀寫小結:

讀寫文件是最多見的IO操做,python內置了讀寫文件的函數,用法和c是兼容的.html

讀寫文件前,咱們必須瞭解一下,在磁盤上讀寫文件的功能都是由操做系統提供的,現代操做系統不容許普通的程序直接操做磁盤,因此讀寫文件就是請求操做系統打開一個文件對象(文件描述),而後,經過操做系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件).python

一、讀文件緩存

要以讀文件的模式打開一個文件對象,使用python內置的open()函數,傳入文件名和標識符:app

f = open("t1.txt","r",encoding="utf-8")

標識符'r'表示讀。函數

若是文件不存在,open()函數就會拋出一個IOError的錯誤,而且會給出詳細的錯誤碼和信息,告訴你文件不存在。編碼

f = open("t122.txt","r",encoding="utf-8")

Traceback (most recent call last):
  File "D:/Learn/python/day14/test.py", line 1, in <module>
    f = open("t122.txt","r",encoding="utf-8")
FileNotFoundError: [Errno 2] No such file or directory: 't122.txt'spa

若是文件打開成功,接下來,調用read()方法能夠一次性讀取文件的所有內容,python把內容讀取到內存,用一個str對象表示。操作系統

print(f.read())
輸出:
hello world!

最後一步調用close()方法關閉文件,文件使用完畢以後必須關閉,由於文件對象會佔用操做系統的資源,而且操做系統同一時間能打開的文件數量也是有限制的。excel

f.close()
f = open(r"文件地址","讀取方式",encoding="utf-8")

"r":以只讀方式
encoding:讀取的編碼格式
f.read() :一次性讀取文件所有內容
f.close():關閉流
r"文件地址":不讓轉義字符「\」起做用code

因爲文件讀寫都有可能產生IOError,一旦出錯,後面的f.close()就不會調用,因此,爲了保證文件不論是否執行出錯都可以正確的關閉文件,咱們可使用try … finally來實現.

try:
 f = open("t1.txt", "r", encoding="utf-8")
 print(f.read())
finally:
 if f:
  f.close() 
可是每次都這麼寫實在太繁瑣,因此,引入了with語句來自動幫咱們調用close()方法:
with open("t1.txt", "r", encoding="utf-8") as f:
print(f.read())
這和前面的try…finally是同樣的,可是代碼更加簡潔,而且沒必要調用f.close()方法。
注意: 使用會一次性讀取文件的所有內容,若是你的文件特別大,好比說有5G,那麼你的內存就爆了,因此,爲了保險起見,咱們能夠反覆調用方法,每次最多讀取size個字節內容,另外調用能夠每次讀取一行內容,調用一次性讀取全部的內容,並按行返回list,所以,要根據須要決定怎麼調用。
若是文件很小,read()一次讀取最方便,若是不能肯定文件大小,反覆調用read(size)比較保險,若是是配置文件,調用readlines()最方便。
for line in f.readlines():
#把末尾的'\n'刪掉
print(line.strip())
read()read(size)readline()readlines()

二、寫文件

寫文件和讀文件都是同樣的,惟一的區別就是調用open()函數時,傳入標識符'w'或者'wb'表示寫文件或寫二進制文件:

f = open("/users/demo/test.txt",'w')
f.write('hello, world!')
f.close()
你能夠反覆調用來寫入文件,可是務必要調用來關閉文件.write()f.close()

當咱們寫入文件時,操做系統每每不會馬上把數據寫入磁盤,而是放到內存緩存起來,空閒的時候再慢慢寫入,只有調用close()方法時,操做系統才保證把沒有寫入的數據所有寫入磁盤,忘記調用close()的後果是數據可能只寫了一部分到磁盤,剩餘的丟失了,因此,仍是使用with語句來的保險:

with open('/users/demo/test.txt', 'w') as f:
 f.write('hello, world')

要寫入特定編碼的文本文件,請給open()函數傳入encoding參數,將字符串自動轉成指定編碼。

以'w'模式寫入文件時,若是文件已經存在,直接覆蓋(至關於刪掉後新寫入一個文件),若是咱們但願追加到文件的末尾怎麼辦?能夠傳入'a'以追加模式寫入。

with open('/users/demo/test.txt', 'a') as f:

f.write('hello, world')

2、把csv格式轉化爲html格式

代碼以下圖

# -*- coding: utf-8 -*-
""" Spyder Editor This is a temporary script file. """ import pandas as pd df = pd.read_excel('Python成績登記信計.xlsx') da = df.to_csv('E:\Anaconda之做業\Python成績登記信計.csv') da = pd.read_csv('E:\Anaconda之做業\Python成績登記信計.csv',index_col=0) da = da.replace('優秀','90') da = da.replace('良好','80') da = da.replace('合格','60') da = da.replace('不合格','10') da = da.fillna(0) print(da) dc = da.to_csv('E:\Anaconda之做業\Python成績登記信計.csv') seg1 = ''' <!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=utf-8>
<h1 align=center>Python成績登記信計</h1>
<table border='1' align="center" width=100%>
<tr bgcolor='yellow'>\n''' seg2="</tr>\n" seg3="</table>\n</body>\n</html>" def fill_data(locls): seg = '<tr><td align="center">{}</td><td align="center">\
    {}</td><td align="center">{}</td><td align="center">\ {}</td ><td align="center">{}</td></tr><td align="center">{}</td></tr>\n'.format(*locls)
    return seg fr = open("E:\Anaconda之做業\Python成績登記信計.csv","r",encoding='utf-8') ls = [] for line in fr: line = line.replace("\n","") ls.append(line.split(",")) print(ls) fr.close() fw = open("E:\Anaconda之做業\Python成績登記信計.html","w",encoding='utf-8') fw.write(seg1) fw.write('<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n<th width="10%">{}</th>\n'.format(*ls[0])) fw.write(seg2) for i in range(len(ls)-1): fw.write(fill_data(ls[i+1])) fw.write(seg3) fw.close

實現下效果以下:

相關文章
相關標籤/搜索