檔案操作基礎
open(類型參數)
參數名 | 意 義 |
---|---|
filename | 要打開的檔案名 |
mode | 可選參數,檔案打開模式 |
bufsize | 可選參數,緩沖區大小 |
encoding | 檔案編碼類型 |
errors | 編碼錯誤處理方法 |
newlines | 控制通用換行符模式的行為 |
closefd | 控制在關閉檔案是否徹底關閉檔案 |
mode是打開檔案的操作模式,入下
模式字元 | 表示的操作 |
---|---|
r | 隻讀(預設) |
w | 可寫,會清楚檔案内容 |
a | 附件資料 |
b | 二進制資料模式 |
x | 建立一個檔案,可寫 |
+ | 打開檔案直接更新 |
t | 文本模式 |
這些字元可以組合在一起表示對檔案的操作模式,如’rb’表示以隻讀模式打開二進制檔案;‘wt’表示以可寫模式打開文本檔案等。
bufsize為0時表示打開檔案不用緩沖,為1時表示進行緩沖,為負值時則使用系統預設值,為任何其他值則表示使用緩沖的位元組數。
encoding 表示檔案編碼的類型,如‘gbk’、‘utf-8’等,以避免讀取檔案内容出現亂碼。newline表示換行符模式,
因為在不同額系統下,換行符有所不同,換行符主要有‘\n’、‘\r’、’\r\n’等,
常用檔案操作及其功能
檔案操作 | 功能描述 |
---|---|
file.read([n]) | 将整個檔案讀入到字元串中,或指定n位元組 |
file.readline([n]) | 讀入檔案的一行到字元串中 |
file.readlines() | 将整個檔案按行讀入到清單中 |
file.write(s) | 向為檔案中寫入字元串 |
file.wirtelines(lines) | 向檔案中寫入一行資料清單 |
file.close() | 關閉打開的檔案 |
例子:
def file_hd1(name="python.txt"):
f = open(name)
res = 0
i = 0
for line in f:
i +=i
print('第%s行的資料為:' % line.strip(),line)
res += int(line)
print('這些數的和為:',res)
f.close()
if __name__ =='__main__':
file_hd1()
fileinput操作檔案
fileinput子產品提供了一個以行模式循環處理一個或多個檔案内容的功能,它實作了對檔案中的‘懶惰’疊代,讀取時不需要把檔案内容放入記憶體,這樣可以提高程式的效率
fileinput子產品中常用的函數有:
input() :傳回能夠用于疊代一個或多個檔案中的所有行的對象
filename(): 傳回目前檔案的名稱
lineno(): 傳回目前讀取的行的數量
isfirstline(): 傳回目前行,判斷是否是檔案的第一行,是目前檔案的第一行時傳回真值,反之傳回假值
filelineno(): 傳回目前讀取行在檔案中的行數
fileinput 也支援上下文管理器,可以使用with語句來進行操作,二不用子啊使用後手工關閉對象
import fileinput
def demo_fileinput():
with fileinput.input(['fpa.txt','fpb.txt']) as lines:
print("總第%d行," %fileinput.lineno(),"檔案%s中第%d: "%(fileinput.filename(),fileinput.filelineno()))
print(line.strip())
if __name__ == '__main__':
demo_fileinput()
常用檔案和目錄操作
獲得目前路徑: os.getcwd()
獲得目錄中的内容 os.listdir(path)
獲得目前目錄的内容 os.listdir()
建立目錄 os.mkdir(path)
删除目錄 os.rmdir(path)
判斷是否為目錄 os.path.isdir(path)
判斷是否為檔案 os.path.isfile(path)
周遊某目錄下的所有檔案和目錄 :os.walk(path)
由檔案名批量擷取姓名和考号
import os
filename = []
for a,b,files in os.walk('test'):
if files:
filenames.append([file[:-4] for file in files])
fname = 'testname'
i = 0
for files in filenames:
f=open(fname+str(i)+.xls','w')
for name in files:
f.write(name[-2:]+'\t'+name[:-2]+'\n')
f.close()
i +=1
print("成功生成了!")
批量檔案重命名
import os
perfix = 'python'
length = 2
base = 1
format = 'mdb'
# 函數PadLeft将檔案名補全到指定的長度
# str為要補全的字元
# num 為要達到的長度
# padstr 未達到長度所添加的字元
def PadLeft(str,num ,padstr):
stringLength = len(str)
n = num - stringlength
if n>=0:
str=padstr*n +str
return str
# 為避免誤操作,這裡先提示使用者
print('the files in %s will be renamed ' % os.getcwd())
all_files = os.listdir(os.getcwd())
print([f for f in all_files if os.path.isfile(f)]) #輸出目前目錄下的所有檔案名
input = input('press y to continue\n') #擷取使用者輸入
if input.lower() != 'y':
exit()
filenames = os.listdir(os.curdir) # 擷取目前目錄中的内容
# 基數減1 ,為下面i=i+1在第一次執行時等于基數
i = base-1
for filename in filename:
i = i+1
# 判斷目前路徑是否為檔案,并且不是“rename.py”
if filename != "rename.py" and os.path.isfile(filename):
name = str(i)
name = PadLeft(name,length ,'0') #将name補全到指定長度
t = filename.split('.')
m = len(t)
if format =='':
os.rename(filename,perfix+name+'.'+t[m-1])
else:
if t[m-1] == format:
os.rename(filename,perfix+name+'.'+t[m-1])
else:
i=i -1 # 保證i連續
else:
i= i-1 #保證i連續
all_files = os.listdir(os.getcwd())
print([f for in all_files if os.path.isfile(f)])
編譯為可執行檔案
用py2exe 生成可執行檔案
py2exe 可以将Python程式打包為Windows下獨立的可執行檔案
要使用py2exe ,首先要編寫一個編譯程式(例如編寫一個名為setup.py的程式),然後在Python中運作編譯setup.py,
即可将需要封裝的其他Python程式編譯成可執行檔案
#檔案hello.py
import ctypes
print('Hello,Python!')
#檔案setup.py
from distutils.core import setup
import py2exe
setup(console=['hello.py']) #指定為控制台程式的主程式檔案名
然後在指令提示符下執行以下指令就可以完成打包:
python setup.py py2.exe
代碼中編譯的語句是setup(console=[‘hello’]),方括号中的就是要編譯的程式名,前面console 表示将其編譯成指令行界面程式。
如果要編譯GUI的可執行檔案,則将console改為Windows。另外,如果需要将程式編譯成 Windows服務,則可以使用service選項
用xx_freeze生成可執行檔案
首先需将cx_free 下載下傳到本機并安裝後才能使用。下載下傳位址為http://sourceforge.net/projects/cx_freeze/files/4.3.3
安裝成功後,接下來就可以進行Python程式的編譯操作。仍然以上節操作的hello.py為例,示範在Python3中使用cx_freeze編譯為exe檔案的方法。
(1)在指令行視窗切換到“hello.py”所在的目錄
(2)輸入以下指令:
d:\python34\Scripts\cxfreeze --target-dir=dist_cxfreeze hello.py
其中的hello.py是需要編譯的程式檔案,dist_cxfreeze是目标檔案夾,打包回生成dist_cxfreeze目錄,
在這個目錄中生成編譯後的可執行檔案。
如果想在編譯GUI界面程式運作時不出現控制台視窗的北京,則在編譯時還需添加一個base-name的參數,指令入下:
c:\python34\Script\cxfreeze gui_filename.py --target-dir dist --base-name=win32GUI
py2exe 比cxfreeze 編譯後的檔案多一些,體積也稍大