亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中文件操作的知識有哪些

發布時間:2020-11-21 11:46:09 來源:億速云 閱讀:132 作者:小新 欄目:編程語言

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

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

首先我們來說只讀文件

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

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

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

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

close()  :     關閉文件,我們在最后都要加上close(),如果不加,程序會一直執行,占用內存空間

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

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

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

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

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

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

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

 hello python

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

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

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

講述了只讀文件和只寫文件,我們對文件有了一些大概的了解,下面我們來說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 的編碼方式編碼的一種類型,那么我們為什么用bytes ? 我們在剛才學習的只讀和只寫,只能讀取和寫入一些文本信息,在我們的生活中,肯定不可能都只是文本,應該也會大量瀏覽圖片或者音頻等其他的方式,那么bytes的作用就來了,它是用于非文字類的文件上傳和下載時使用。

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

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

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

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

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

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

其實還是那個意思,'hello',眾所周知,它是str類型,str是什么編碼方式?Unicode吧,但是在python中,上傳下載不允許直接使用Unicode,默認支持的是‘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’,當然功能也隨之改變,它是追加的意思,相當于列表的append()方法。(在之后我們就不具體說明bytes類型了,因為意思和之前所描述的只讀和只寫差不多,所以在之后就不進行過多的描述了。)

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

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

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

# 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)  # 是按照字節定光標的位置
# f.tell() 告訴你光標的位置
# print(f.tell())
# content = f.read()
# print(content)
# f.tell()
# f.readable()  # 是否刻度
# line = f.readline()  # 一行一行的讀
# line = f.readlines()  # 每一行當成列表中的一個元素,添加到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()的。

最后我介紹下斷點續傳的問題:

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

最后留一個小題:

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

#方法一:

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('您準備注冊還是登陸,如果登陸請輸入G , 如果想繼續注冊輸入 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

感謝你能夠認真閱讀完這篇文章,希望小編分享Python中文件操作的知識有哪些內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和平县| 理塘县| 景洪市| 乌拉特中旗| 当雄县| 富裕县| 苏尼特右旗| 平武县| 红安县| 藁城市| 洛南县| 宁蒗| 电白县| 莱西市| 临洮县| 驻马店市| 迁西县| 长顺县| 西乡县| 馆陶县| 胶州市| 同心县| 柏乡县| 石台县| 京山县| 威海市| 鄄城县| 鸡西市| 社会| 山丹县| 平塘县| 太仆寺旗| 波密县| 宣恩县| 平泉县| 昆明市| 杭锦旗| 应城市| 凯里市| 安泽县| 化州市|