Python中文件操作的知識有哪些-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站制作、畢節(jié)網(wǎng)絡(luò)推廣、成都小程序開發(fā)、畢節(jié)網(wǎng)絡(luò)營銷、畢節(jié)企業(yè)策劃、畢節(jié)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供畢節(jié)建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:muchs.cn

這篇文章主要介紹了Python中文件操作的知識有哪些,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

文件主要分為讀文件,寫文件,讀寫文件,寫讀文件.....

首先我們來說只讀文件

#1,只讀文件(‘絕對路徑’)
f1 = open('d:\a.txt',mode='r',encoding='utf-8')
content = f1.read()
print(content)
f1.close()

我們先看下絕對路徑下的讀文件:

open(1,2,3):打開文件,open()里面的第一個參數(shù)是路徑的意思,你存儲的文件絕對路徑,里面第二個參數(shù)是模式,‘r’在這里的意思是只讀模式,里面的

第三個參數(shù)encoding()是編碼方式,一般默認(rèn)的都是 utf-8 ,因為python文件傳輸存儲的編碼格式都是 utf -8。

close() ?。?nbsp;    關(guān)閉文件,我們在最后都要加上close(),如果不加,程序會一直執(zhí)行,占用內(nèi)存空間

read()   :  只讀,讀取文件的內(nèi)容

我們在看下相對路徑下的讀文件

f1 = open('a',mode='r',encoding='utf-8')
content = f1.read()
print(content)
f1.close()

我們不難看出相對路徑和絕對路徑的代碼基本上來說是差不多的,有差別的只是open()的一個參數(shù),路徑,路徑被換成了相對路徑。在做程序時,我們使用的相對路徑的頻率遠遠高于絕對路徑。所以我們以后默認(rèn)使用相對路徑,也希望大家以后也使用相對路徑,少用或不用絕對路徑,因為絕對路徑一旦改變文件的位置,會找不到,會導(dǎo)致我們的程序報錯。、

說完了只讀文件,下面來說只寫文件(寫文件我們也可以稱創(chuàng)建文件):

#只寫文件
f1 = open('a',mode='w',encoding='utf-8')
f1.write(' hello python ')
f1.close()

相對于只讀文件,我們來對比的來看只寫文件,有差別的時open()的第二個參數(shù),mode 由以前的 ‘r’ 換成了 ‘w’. 我們可以看下,執(zhí)行完此程序的源文件

 hello python

對于只寫文件,我們要來講述一個知識點,open()的一個參數(shù),路徑。由于是寫文件,所以存在文件的是否存在,如果文件不存在,就好說了,我們直接執(zhí)行write(),把咱們要寫的文件直接添加的路徑下的文件就可以了,那么如果我們要寫的文件之前就存在了呢,并且之前由數(shù)據(jù)了呢?我們怎么辦。我們來看下如下代碼:

a = open('1',mode='w',encoding='utf-8')
a.write('hello')        #hello
a.close()
b = open('1',mode='w',encoding='utf-8')
b.write('hi')
b.close()               #hi

我們不難發(fā)現(xiàn)當(dāng)我們往 1 這個文件里存儲 ‘hello’ 以后,我們再存儲‘hi’,源文件只剩 ‘hi’ 這個字符里,所以我們得出:對于寫,沒有此文件就會創(chuàng)建文件,如果有文件,就會把源文件內(nèi)容刪除,再寫新的內(nèi)容(覆蓋)。

講述了只讀文件和只寫文件,我們對文件有了一些大概的了解,下面我們來說bytes類型的只讀和只寫文件。下面來看下代碼:

只寫文件:
a = open('1',mode='wb')
a.write('hello'.encode('utf-8'))        #hello
a.close()

只讀文件:
a = open('1',mode='rb')
content = a.read()
print(content)
a.close()

下面我首先來說下bytes類型,bytes類型是以 utf-8 的編碼方式編碼的一種類型,那么我們?yōu)槭裁从胋ytes ? 我們在剛才學(xué)習(xí)的只讀和只寫,只能讀取和寫入一些文本信息,在我們的生活中,肯定不可能都只是文本,應(yīng)該也會大量瀏覽圖片或者音頻等其他的方式,那么bytes的作用就來了,它是用于非文字類的文件上傳和下載時使用。

首先說下bytes類型的只讀文件,首先open()第三個三個參數(shù)被取消了,不再用編碼(encoding),它是以什么方式存儲,就打開什么方式。

最后我們說下read(),我們知道,content的數(shù)據(jù)類型讀取的是bytes類型,但是打印出來content卻是str, 那么問題來了,(因為str采用的是Unicode的編碼方式,而我們上傳下載和存儲的bytes編碼方式是utf-8,但是卻打印出來了字符串,) 這是為什么呢?

是read() , 隱藏了 bytes -> str 

下面說下bytes類型的只寫文件,同樣open()第三個三個參數(shù)被取消了,不再用編碼(encoding),但是相對于之前的只寫文件卻出現(xiàn)了一些差異,我們在write()里面進行了編碼的轉(zhuǎn)化,eg.

a.write('hello'.encode('utf-8'))

很多人會問了,為什么這段代碼什么意思?為什么這樣寫呢?

其實還是那個意思,'hello',眾所周知,它是str類型,str是什么編碼方式?Unicode吧,但是在python中,上傳下載不允許直接使用Unicode,默認(rèn)支持的是‘utf-8’,同時encode()使str的方法,所以在這個位置進行修改編碼方式

講完了只寫文件,很多人就會問博主了,我們寫入只能覆蓋,可是這樣始終只能存一個值啊,我們能不能存多份值呢,有什么方法嗎?比如說我們列表的append()方法.......,其實我們文件也是有追加的:

#追加:
a = open('1',mode='a',encoding='utf-8')
a.write('hello')
a.close()
#bytes類型:
a = open('1',mode='ab')
a.write('xiaoming'.encode('utf-8'))
a.close()

相對于只寫的代碼,我們可以看出,mode = 'a' ,它有以前的‘w’變成了‘a(chǎn)’,當(dāng)然功能也隨之改變,它是追加的意思,相當(dāng)于列表的append()方法。(在之后我們就不具體說明bytes類型了,因為意思和之前所描述的只讀和只寫差不多,所以在之后就不進行過多的描述了。)

那么我們很多人就會有疑問了,問什么‘a(chǎn)’能添加而‘w’卻只能覆蓋呢?在這里先大概說下,是光標(biāo)的原因。

r :光標(biāo)在字符的最后面
w :光標(biāo)在字符的最前面
a :光標(biāo)移動到有文字的最后一位

文件的讀寫:(只能進行一次讀寫)

# f = open('log',mode='r+',encoding='utf-8')
# print(f.read())
# f.close()
# f = open('log',mode='r+b')
# print(f.read())
# f.write('大猛,小孟'.encode('utf-8'))
# f.close()

文件的追加寫讀:

# f = open('log',mode='a+',encoding='utf-8')
# f.write('佳琪')
# f.seek(0)
# print(f.read())
# f.close()

下面來介紹文件的方法:

# obj = open('log',mode='r+',encoding='utf-8')
# content = f.read(3)  # 讀出來的都是字符
# f.seek(3)  # 是按照字節(jié)定光標(biāo)的位置
# f.tell() 告訴你光標(biāo)的位置
# print(f.tell())
# content = f.read()
# print(content)
# f.tell()
# f.readable()  # 是否刻度
# line = f.readline()  # 一行一行的讀
# line = f.readlines()  # 每一行當(dāng)成列表中的一個元素,添加到list中
# f.truncate(4)
# for line in f:
#     print(line)
# f.close()

在文件中,open()我們還有另外一種寫法,比較常用,以后我們大多用這個寫法:

# with open('log',mode='r+',encoding='utf-8') as f,\
#         open('log',mode='w+',encoding='utf-8') as f1:

這個寫法是不用寫close()的。

最后我介紹下斷點續(xù)傳的問題:

1.先知道光標(biāo)的位置    -> tell()
2.將光標(biāo)調(diào)制到特定的位置 -> seek(tell())

最后留一個小題:

通過文件實現(xiàn),之前做過的三次驗證用戶登陸:

#方法一:

print('請先注冊用戶信息')
username = input('please input the username :')
password = input('please input the password :')
f1 = open('message',mode='w+',encoding='utf-8')
f1.write(username)
f1.seek(0)
f2 = open('password',mode='w+',encoding='utf-8')
f2.write(password)
f2.seek(0)
print('您準(zhǔn)備注冊還是登陸,如果登陸請輸入G , 如果想繼續(xù)注冊輸入 I ,如果退出請輸入 E')
s1 = input('<<<')
if s1.upper() == 'G':
    i = 3
    while i > 0:
        user = input('please input the username :')
        word = input('please input the password :')
        if f1.read() == user and f2.read() == word:
            print('welcome to enter , loading......')
            break
        elif f1.read() != user or f2.read() != word:
            i -= 1
            print('Fuck off ,please input continue , you have ' + str(i) + ' times')
            continue
elif s1 .upper() == 'I':
    username = input('please input the username :')
    password = input('please input the password :')

    f1 = open('message', mode='w+', encoding='utf-8')
    f1.write(username)
    f1.seek(0)
    f2 = open('password', mode='w+', encoding='utf-8')
    f2.write(password)
    f2.seek(0)
else:
    exit('exiting....')

f1.close()
f2.close()


#方法二

username = input('please input the username :')
password = input('please input the password :')
with open('mess',mode='w+',encoding='utf-8') as f:
    f.write('{}\n{}'.format(username,password))
print('恭喜你注冊成功!')
i = 0
a = []
while i < 3:
    user = input('please input the username :')
    pswd = input('please input the password :')
    with open('mess',mode='r+',encoding='utf-8')as f1:
        for line in f1:
            a.append(line)
        a[0] = a[0].rstrip('\n')
        if user == a[0] and pswd == a[1] :
            print('登陸成功!')
            break
        else:
            print('登陸失敗')
            i += 1

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python中文件操作的知識有哪些內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細的解決方法等著你來學(xué)習(xí)!

網(wǎng)站題目:Python中文件操作的知識有哪些-創(chuàng)新互聯(lián)
當(dāng)前地址:http://muchs.cn/article20/dejjco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、品牌網(wǎng)站制作、網(wǎng)站收錄、靜態(tài)網(wǎng)站面包屑導(dǎo)航、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計