Python学习-文件的调用-读取
?
1.文件的打開(kāi)
open('filename'[,mode[,buffering]])
#這個(gè)一定要記得關(guān)文件。close.()?
filename,要以路徑的形式展示,比如在"c:\"中,則要這樣寫(xiě): r'c:\filename'
? ? ? ? ? ? ? ?如果不用路徑展示,那就用'filename'.其會(huì)在執(zhí)行文件所在的文件夾進(jìn)行搜索。
mode的格式有幾種:
‘r’, ?read, ?讀取模式;
'w’, ?write,寫(xiě)入模式;
'a', add, 添加模式;
'+', 讀/寫(xiě)模式;
'b', 二進(jìn)制模式;注意‘rb’參數(shù)可以用來(lái)讀取二進(jìn)制文件;
主要使用的模式是前面三種。
buffering是緩沖,參數(shù)為,0, 1,以及大于1的數(shù)字和-1。
0,表示不用緩沖,直接讀寫(xiě)硬盤;
1,表示啟用緩沖(即內(nèi)存);
大于1的數(shù)字,表示緩沖的大小(單位是字節(jié))
-1,表示默認(rèn)的緩沖大小。
?
with open('filename') as file_object: ? #這種方式可以自己關(guān)文件,但是后續(xù)有關(guān)在文件運(yùn)作的內(nèi)容都要是在其下一級(jí)。但是賦值出來(lái)后的結(jié)果可以穩(wěn)定的。
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)
結(jié)果如下:
The 0 username is zhangyixiao
The 1 username is yingkuqi
The 1 username is yingkuqi
?
2.讀
首先,打開(kāi)文件后,如:
f = open('filename','r') ?#使用了名為f的對(duì)象來(lái)調(diào)用,(不用好像不能調(diào)用),然后使用'r'模式(ps,可以省略,因?yàn)槭悄J(rèn)的)
f.read(n) ?# n,表示讀取多少字符,如果沒(méi)有n就表示把之前未讀取的,全部讀取出來(lái)。
f.readlines() ?#這個(gè)是讀取出所有行,輸出的結(jié)果會(huì)是一個(gè)列表,每一行作為一個(gè)元素存儲(chǔ)在里面。
f.readline(n) # n 表示可以讀取的字符數(shù)目的最大值,從0開(kāi)始,沒(méi)有寫(xiě)表示按次序來(lái)。 如果要消除尾部的換行符'\n',可以在后面加上rstrip.()
如:
f.readline().rstrip()
$$一定要記住!這個(gè)read,readines,readline的功能中,如果之前有讀取過(guò)的,它就不再讀取了。包括使用readlines,read,readline進(jìn)行讀取的內(nèi)容
?
如果想要讀取特定某一行,可以利用 一個(gè)指針以及for i in range(n)的結(jié)構(gòu)來(lái)實(shí)現(xià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一致,則進(jìn)入之后的判斷
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())#打開(kāi)文件,賦值給內(nèi)存中的一個(gè)值,然后操作,會(huì)自動(dòng)關(guān)閉 with open(r'e:\first week\song.txt', 'r') as test:#print(test.read()) #讀取for i in range(10):print('%i:' % i, test.readline()) # 這個(gè)形式就是反復(fù)執(zhí)行幾次,readline是按照行一個(gè)個(gè)執(zhí)行的,之前讀取過(guò)的不會(huì)再讀取print('test print', test.readline())test2 = test.readlines().copy() #全部讀取,輸出的結(jié)果是一個(gè)列表,之前讀取過(guò)的不會(huì)再讀取print(test2)#打印出文件中的每一行:for line in test2: #這樣,line代表列表中的每一個(gè)元素(就是一行),輸出就是每一行的信息print(line.strip()) #strip可以取出空格和換行print('測(cè)試是否會(huì)自動(dòng)關(guān)閉test', test) #會(huì)自動(dòng)關(guān)閉的 #換一個(gè)形式就可以解決之前讀取過(guò)的數(shù)據(jù)不能讀取的問(wèn)題 #采用利用readlines,再進(jìn)行淺copy,就可以方便進(jìn)行各種的操作 #但是會(huì)出現(xiàn)一個(gè)新的變量,且不會(huì)自動(dòng)關(guān)閉,這樣就占用了更多的內(nèi)存,可以用del來(lái)釋放變量 with open(r'e:\first week\song.txt', 'r') as test0:test = test0.readlines().copy() #把這個(gè)文件的東西作為列表復(fù)制出來(lái)# print(test.read()) #讀取for i in range(10):print('%i:' % i, test[i].strip()) # 這個(gè)形式就是反復(fù)執(zhí)行幾次,readline是按照行一個(gè)個(gè)執(zhí)行的,之前讀取過(guò)的不會(huì)再讀取print('test print', test)test2 = test0.readlines().copy() # 因?yàn)橹耙呀?jīng)讀取過(guò)了,所以輸出的結(jié)果空的列表print(test2)# 打印出文件中的每一行:for line in test: # 這樣,line代表列表中的每一個(gè)元素(就是一行),輸出就是每一行的信息print(line.strip()) # strip可以取出空格和換行print('測(cè)試是否會(huì)自動(dòng)關(guān)閉test', test) #不會(huì)自動(dòng)關(guān)閉,這樣就占用了較多的內(nèi)存了。但是通過(guò)del去除變量就可以釋放了 del test #但是通過(guò)del去除變量就可以釋放了 #嘗試使用enumerate來(lái)判定讀取的是哪一行數(shù)據(jù) 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('測(cè)試是否會(huì)自動(dòng)關(guān)閉test', test) # 但是重新利用文件的賦值方式進(jìn)行賦值之后,就可以關(guān)閉。不過(guò)要盡量避免這樣的情況出現(xiàn)。
?
3.寫(xiě)
簡(jiǎn)單的格式是
with open(filename,'w') as file:
file.write("contents")
在w的打開(kāi)方式下,如果目錄里面沒(méi)有這個(gè)文件,這個(gè)文件會(huì)被創(chuàng)建;如果有,就會(huì)被覆蓋(所以仔細(xì)考慮用'a',還是用'w')
‘a(chǎn)’模式下,不會(huì)覆蓋,只會(huì)添加,但是這個(gè)模式不能讀取的;
如果要寫(xiě)入多行數(shù)據(jù),可以采用的形式是: with open(filename,'w') as file:
file.write("contents\n")
file.write("contents\n")
4.其他
一個(gè)break只能跳出當(dāng)前的一個(gè)for循環(huán)或者while循環(huán);
轉(zhuǎn)載于:https://www.cnblogs.com/Ian-learning/p/7707135.html
總結(jié)
以上是生活随笔為你收集整理的Python学习-文件的调用-读取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2018各大银行信用卡年费周期及扣款时间
- 下一篇: python文件操作总结