?
1.文件的打開
open('filename'[,mode[,buffering]])
#這個一定要記得關文件。close.()?
filename,要以路徑的形式展示,比如在"c:\"中,則要這樣寫: r'c:\filename'
? ? ? ? ? ? ? ?如果不用路徑展示,那就用'filename'.其會在執行文件所在的文件夾進行搜索。
mode的格式有幾種:
‘r’, ?read, ?讀取模式;
'w’, ?write,寫入模式;
'a', add, 添加模式;
'+', 讀/寫模式;
'b', 二進制模式;注意‘rb’參數可以用來讀取二進制文件;
主要使用的模式是前面三種。
buffering是緩沖,參數為,0, 1,以及大于1的數字和-1。
0,表示不用緩沖,直接讀寫硬盤;
1,表示啟用緩沖(即內存);
大于1的數字,表示緩沖的大小(單位是字節)
-1,表示默認的緩沖大小。
?
with open('filename') as file_object: ? #這種方式可以自己關文件,但是后續有關在文件運作的內容都要是在其下一級。但是賦值出來后的結果可以穩定的。
with open(r'e:\first week\username.txt','r') as f:
for i in range(2):
r_username = 'The %s username is %s'%(i,f.readline())
print(r_username)
print(r_username)
結果如下:
The 0 username is zhangyixiao
The 1 username is yingkuqi
The 1 username is yingkuqi
?
2.讀
首先,打開文件后,如:
f = open('filename','r') ?#使用了名為f的對象來調用,(不用好像不能調用),然后使用'r'模式(ps,可以省略,因為是默認的)
f.read(n) ?# n,表示讀取多少字符,如果沒有n就表示把之前未讀取的,全部讀取出來。
f.readlines() ?#這個是讀取出所有行,輸出的結果會是一個列表,每一行作為一個元素存儲在里面。
f.readline(n) # n 表示可以讀取的字符數目的最大值,從0開始,沒有寫表示按次序來。 如果要消除尾部的換行符'\n',可以在后面加上rstrip.()
如:
f.readline().rstrip()
$$一定要記住!這個read,readines,readline的功能中,如果之前有讀取過的,它就不再讀取了。包括使用readlines,read,readline進行讀取的內容
?
如果想要讀取特定某一行,可以利用 一個指針以及for i in range(n)的結構來實現:
password = input("Please enter your password:")
passwd = open(r'e:\first week\passwd.txt', 'r')
for l in range(2): #l作為指針指示第幾行
passwd_buffer = passwd.readline().rstrip()
if l == j: #如果l與登錄用戶的順序j一致,則進入之后的判斷
if password == passwd_buffer:
print("yes,%s is in!"% username)
break
else:
print("Your password is wrong!")
count += 1
with open(r'e:\first week\passwd.txt', 'r+') as file_pass:for i in range(2):print(file_pass.readline())#打開文件,賦值給內存中的一個值,然后操作,會自動關閉 with open(r'e:\first week\song.txt', 'r') as test:#print(test.read()) #讀取for i in range(10):print('%i:' % i, test.readline()) # 這個形式就是反復執行幾次,readline是按照行一個個執行的,之前讀取過的不會再讀取print('test print', test.readline())test2 = test.readlines().copy() #全部讀取,輸出的結果是一個列表,之前讀取過的不會再讀取print(test2)#打印出文件中的每一行:for line in test2: #這樣,line代表列表中的每一個元素(就是一行),輸出就是每一行的信息print(line.strip()) #strip可以取出空格和換行print('測試是否會自動關閉test', test) #會自動關閉的 #換一個形式就可以解決之前讀取過的數據不能讀取的問題 #采用利用readlines,再進行淺copy,就可以方便進行各種的操作 #但是會出現一個新的變量,且不會自動關閉,這樣就占用了更多的內存,可以用del來釋放變量 with open(r'e:\first week\song.txt', 'r') as test0:test = test0.readlines().copy() #把這個文件的東西作為列表復制出來# print(test.read()) #讀取for i in range(10):print('%i:' % i, test[i].strip()) # 這個形式就是反復執行幾次,readline是按照行一個個執行的,之前讀取過的不會再讀取print('test print', test)test2 = test0.readlines().copy() # 因為之前已經讀取過了,所以輸出的結果空的列表print(test2)# 打印出文件中的每一行:for line in test: # 這樣,line代表列表中的每一個元素(就是一行),輸出就是每一行的信息print(line.strip()) # strip可以取出空格和換行print('測試是否會自動關閉test', test) #不會自動關閉,這樣就占用了較多的內存了。但是通過del去除變量就可以釋放了 del test #但是通過del去除變量就可以釋放了 #嘗試使用enumerate來判定讀取的是哪一行數據 with open(r'e:\first week\song.txt', 'r') as test:for index, line in enumerate(test):if index == 9:print('The 10th line is:', line)print('測試是否會自動關閉test', test) # 但是重新利用文件的賦值方式進行賦值之后,就可以關閉。不過要盡量避免這樣的情況出現。
?
3.寫
簡單的格式是
with open(filename,'w') as file:
file.write("contents")
在w的打開方式下,如果目錄里面沒有這個文件,這個文件會被創建;如果有,就會被覆蓋(所以仔細考慮用'a',還是用'w')
‘a’模式下,不會覆蓋,只會添加,但是這個模式不能讀取的;
如果要寫入多行數據,可以采用的形式是:
with open(filename,'w') as file:
file.write("contents\n")
file.write("contents\n")
4.其他
一個break只能跳出當前的一個for循環或者while循環;