python學習記錄(三)(文件操作)

1.open() 函數用於打開一個文件

創建一個 file 對象,相關的方法纔可以調用它進行讀寫。
open(name[, mode[, buffering]])
參數說明:

name : 一個包含了你要訪問的文件名稱的字符串值。

mode : mode 決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數是非強制的,默認文件訪問模式爲只讀®。

buffering : 如果 buffering 的值被設爲 0,就不會有寄存。如果 buffering 的值取 1,訪問文件時會寄存行。如果將 buffering 的值設爲大於 1 的整數,表明了這就是的寄存區的緩衝大小。如果取負值,寄存區的緩衝大小則爲系統默認。
注意:w、w+會覆蓋已經存在的文件
在這裏插入圖片描述

2.fileObject.seek(offset[, whence]) 方法用於移動文件讀取指針到指定位置

參數:
offset – 開始的偏移量,也就是代表需要移動偏移的字節數
whence:可選,默認值爲 0。給offset參數一個定義,表示要從哪個位置開始偏移;0代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起。
打開文件的模式有:

r ,只讀模式【默認】
w,只寫模式【不可讀;不存在則創建;存在則清空內容;】
x, 只寫模式【不可讀;不存在則創建,存在則報錯】
a, 追加模式【可讀; 不存在則創建;存在則只追加內容;】

“+” 表示可以同時讀寫某個文件
r+, 讀寫【可讀,可寫,不會創建不存在的文件,從頂部開始寫 會覆蓋之前此位置的內容】
w+,寫讀【可讀,可寫,不存在則創建;存在則清空內容;】
x+ ,寫讀【可讀,可寫,不存在則創建,存在則報錯
a+, 寫讀【可讀,可寫,不存在則創建;存在則只追加內容;】

"b"表示以二進制的方式操作
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b

**r+解釋:**運行之前是兩行五五開牛逼,運行後按順序覆蓋寫入,第二行的牛逼依舊存在,並未覆蓋
在這裏插入圖片描述

3.file對象常見函數

在這裏插入圖片描述

4.文件讀取時常見的格式錯誤

在這裏插入圖片描述
原因:
讀取文件中有中文
解決辦法:
打開文件時以utf-8格式打開

f= open('C:/Desktop/PY/wuwukai.txt',encoding='utf-8')
print(f.read(10))
``
each_line 爲f中的每一行
```python
for each_line in f :
    print(each_line)

5.注意:utf-8中,一個漢字佔3個字節

原文:你們可能不知道只用20萬贏到578萬是什麼概念
f.seek(0,0)
print(f.read(4))#read(4) 讀了四個漢字
print(f.tell())# 此時的位置爲12 即‘不’字的開頭
f.seek(3,0)#0123 即們字開頭 如輸入1或2則會報錯
print(f.read(4))
————————————————————下方爲輸出結果————————————————————
你們可能
12
們可能不

6.接受輸入並保存爲新文件

import os.path

def file_write(file_name):
    f = open(file_name+'.txt','w')
    print('請輸入內容[單獨樹立\':w\'保存退出]:')

    while True :
        write_some = input()
        if write_some != (':w'|':w'): #不區分中英
            f.write('%s\n' % write_some)
        else :
            break
    
    f.close()

file_name = input('請輸入文件名:')
if os.path.isfile(file_name+'.txt') : #判斷是否本地是否存在同名文件
    print('請注意,若該文件夾中存在同名文件,請重新命名')
else:
    file_write(file_name)

7.txt文件比較

def file_compare(file1,file2):
    f1 = open(file1,encoding='utf-8')
    f2 = open(file2,encoding='utf-8')
    count = 0 #統計行數
    different = [] #統計不一樣的數量

    for line1 in f1:
        line2 = f2.readline()
        count +=1
        if line1 != line2:
            different.append(count)

    f1.close()
    f2.close()
    return different

file1 =input('請輸入第一個文件名:')+'.txt'
file2 =input('請輸入第二個文件名:')+'.txt'
#也該覈查是否存在該文件
while file1==file2:
    print('該兩文件爲同一文件,請重新輸入第二個文件名:')
    file2 =input('請輸入第二個文件名:')
different = file_compare(file1,file2)

if len(different) ==0:
    print('兩個文件一樣')
else:
    print('兩個文件共用[%d]處不同:' %len(different))
    for each in different:
        print('第%d行不一樣' % each)
發佈了12 篇原創文章 · 獲贊 0 · 訪問量 6994
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章