Python全棧工程師(文件操做、編碼)

 

ParisGabriel
 
 
 
         天天堅持手寫  一天一篇  決定堅持幾年 爲了夢想爲了信仰
 
   

                      Python人工智能從入門到精通python

 

 

 

最近簡直要死了 發燒感冒 喉嚨痛。。。。、緩存

 


如何長期保存計算機中數據:
須要文件操做app

  文件 file:
    文件是用於數據存儲的單位
    文件一般用來長期儲存數據
    文件中的數據以字節爲單位進行順序儲存
文件的操做流程:
  1.打開文件
  2.讀/寫文件
  3.關閉文件
  注:
    任何操做系統, 一個應用程序同時打開文件數量有最大數
文件打開函數:
  open(file, mode=‘rt’) 用於打開一個文件, 返回此文件流對象,
  若是打開文件失敗, 則會觸發osError錯誤
文件的關閉方法:
  F.colse() #關閉問津 釋放系統資源ide

示例:函數

# 此示例示意文件的打開和關閉操做
try:
    f = open('./aaa.txt')  # 不存在此文件
    # f = open('./myfile.txt')  # 不存在此文件
    print("打開文件成功")

    # 此處要進行讀/寫操做

    f.close()  # 半閉文件
except OSError:
    print("文件打開失敗")

文件方法:編碼

文件

mode 模式字符的含義

字符 含義
'r' 以只讀方式打開(默認)
'w' 以只寫方式打開,刪除原有文件內容(若是文件不存在,則建立該文件並以只寫方式打開)
'x' 建立一個新文件, 並以寫模式打開這個文件,若是文件存在則會產生"FileExistsError"錯誤
'a' 以只寫文件打開一個文件,若是有原文件則追加到文件末尾
'b' 用二進制模式打開
't' 文本文件模式打開 (默認)
'+' 爲更新內容打開一個磁盤文件 (可讀可寫)
  • 缺省模式是 'rt'
  • 'w+b' 能夠實現二進制隨機讀寫,當打開文件時,文件內容將被清零
  • 'r+b' 以二進制讀和更新模式打開文件,打開文件時不會清空文件內容
  • 'r+' 以文本模式讀和更新模式打開文件,打開文件時不會清空文件內容

python 文件經常使用方法:

方法 說明
F.close() 關閉文件(關閉後文件不能再讀寫會發生ValueError錯誤)
F.readline() 讀取一行數據, 若是到達文件尾則返回空行
F.readlines(max_chars=-1) 返回每行字符串的列表,max_chars爲最大字符(或字節)數
F.writelines(lines) 將字符串的列表或字符串的列表中的內容寫入文件
二進制文件操做方法  
F.read(size=-1) 從一個文件流中最多讀取size個字符(文本文件)或字節(二進制文件),若是不給出參數,則默認讀取文件中所有的內容並返回
F.write(text) 寫一個字符串到文件流中,返回寫入的字符數(文本文件)或字節數(二進制文件)
F.tell() 返回當前文件流讀寫指針的絕對位置(字節爲單位)
F.seek(offset, whence=0) 改變數據流讀寫指針的位置,返回新的絕對位置
F.flush() 把寫入文件對象的緩存內容寫入到磁盤
   
F.readable() 判斷這個文件是否可讀,可讀返回True,不然返回False
F.writable() 判斷這個文件是否可寫,可寫返回True,不然返回False
F.seekable() 返回這個文件對象是否支持隨機定位
F.truncate(pos = None) 剪掉 自pos位置以後的數據,返回新的文件長度

 


文本文件操做:
  操做模式:
  ‘t’
  說明:
    1.默認文件儲存的都爲字節數據, 在讀寫過程會自動進行編解碼操做
    2.文本文件以行位單位進行分割, 在python內部統一用"\n"作爲換行符進行分割
    3.對文本文件的讀寫操做須要用字符串(str)進行數據操做
Linux換行符: '\n'
Windows 換行符: '\r\n'
新的Mac OS 換行符: '\n'
舊的Macintosh換行符: '\r'(已不用了)人工智能

 

文件流對象是可迭代對象, 迭代過程當中將換行符「\n」做爲分隔符spa

    f = open('phonenumber.txt')
    for line in f:
        print(line)  # 打印每一行的數據

 

標準輸入輸出文件:
  sys.stdin    標準輸入文件
  Ctrl + D      輸入文件結束符
  sys.stdout    標準輸出文件
  sys.stderr       標準錯誤輸出文件
  標準文件絕對不能關閉
Linux系統內全部的硬件都會映射成文件 關閉文件會致使錯誤
模塊:sys
注:
  標準文件不須要打開和關閉就可使用
示例:指針

import sys

sys.stdout.write("我是標準輸出\n")
sys.stderr.write("我是一個錯誤\n")


import sys

s = sys.stdin.read()
print("s=", s)


print("程序結束")

 

二進制文件操做:
  二進制文件操做模式字符:‘b’
  默認文件中存儲的是以字節數據爲單位一般有人爲規定格式
  二進制文件操做須要用字節串進行讀寫
  F.read()/F.readline() F.readlines()返回類型
對於文本操做
  F.write() 對於二進制文件也須要用字節串進行操做
  F.tell
  做用:
    返回當前的讀寫位置(從文件頭以字節爲單位)
  F.seek方法:
    F.seek(偏移量,whence=相對位置)
  偏移量
    大於0的數表明向文件尾方向移動的字節數
    小於0的數表明向文件頭方向移動的字節數
  相對位置
    0表明從文件頭開始偏移
    1表明從文件當前位置開始偏移
    2表明從文件尾開始偏移 (第一個參數必須是負的)
示例:code

# 此示例示意用seek改變文件的讀寫位置,用tell來獲得讀寫位置

f = open('myseek.txt', 'rb')
b = f.read(2)  # b'AB' 讀取出來
print(b)  # b'AB

# 從頭開始向後走5個字節
# f.seek(5, 0)

# 從當前位置向後走3個字節
# f.seek(3, 1)

# 從文件尾向前數15個字節
f.seek(-15, 2)

b = f.read(5)
print(b)  # b'abcde'

f.close()

 

漢字編碼(只講兩種)
  國標系列:
    GB18030(二字節或四字節編碼27553個字)
    GBk二字節編碼21003個字)
    GB2312二字節編碼6763個字)
    (Windows 經常使用)
  國際標準Unicode <---> UTF-8 (Ascii 佔1字節 漢字佔3字節)
    (Linux Mac OS X / IOS /Android)
    python編碼字符串:
    ‘gb18030’
    ‘gb2312’
    ‘gbk’
    ‘utf-8’
    ‘ascii’
    ....
以上字符串用於encidedecode
編碼註釋:
  在Python源文件中的第一行第二行寫入以下內容:
    # -*- codeing:gbk -*-
    #設置源文件編碼格式爲gbk
    或
    # -*- codeing:utf-8 -*-
    #設置源文件編碼格式爲utf-8
  做用:
    告訴解釋執行器文件的編碼是什麼

 

練習:
本身寫一個文件 'info.txt' 內部存一些文字信息
如:
張三 20 100
李四 21 96
小王 22 98
寫程序將這些數據讀取出來,打印到終端上

答案:

try:
    f = open("myfile.txt")
    L = f.readlines()
    for x in L:
        s = x.strip()
        n, a, s = s.split()
        print("姓名:", n, "年齡:", int(a), "成績:", int(s))
except:
    print("打開文件是失敗")

練習:
1. 寫程序,循環輸入不少我的的姓名,電話號碼,
當輸入結束後將這些信息存入到文件phonenumber.txt中
(建議先用列表暫存數據,格式本身定義)

  2. 寫程序,將phonenumber.txt文件中的數據讀取出來.
     再用如下格式打印出來:
如:
小張 的電話是 13888888888
小李 的電話是 13999999999

 

練習:
1. 寫程序實現複製文件的功能
要求:
1. 要考慮特大文件問題
2. 要關閉文件
3. 要能複製二進制文件
如:
請輸入源文件路徑名: /home/tarena/xxx.tar.gz
請輸入目標文件路徑名: ./a.tar.gz
顯示:
文件已成功複製

答案:

def copy_myfile():
    try:
        ypath = input("please inout raw path:")
        xpath = input("please inout new path:")
        f1 = open(xpath, "w+b")
        f = open(ypath, "r+b")
        for x in f:
            f1.write(x)
        f1.close()
        f.close()
    print("File copied")
    except:
        print("file not inexeistence")


copy_myfile()

2. 修改學生信息管理程序,要求加入兩個功能:
9) 保存信息到文件(si.txt)

 

L = [{"name": "Tom", "age": 20, "score": 98},
     {"name": "Lin", "age": 21, "score": 99},
     {"name": "Garin", "age": 19, "score": 100}]


def student_file(L):
    try:
        f = open("./si.txt", "x")
        for x in L:
            f.write(x["name"])
            f.write(" ")
            f.write(str(x["age"]))
            f.write(" ")
            f.write(str(x["score"]))
            f.write("\n")
    except FileExistsError:
        f = open("./si.txt", "a")
        for x in L:
            f.write(x["name"])
            f.write(" ")
            f.write(str(x["age"]))
            f.write(" ")
            f.write(str(x["score"]))
            f.write("\n")

student_file(L)

 

 

10) 從文件中讀取數據(si.tx

def open_student_file():
    f = open("./si.txt")
    L = []
    for line in f.readlines():
        s = line.strip()
        n, a, s = s.split()  # 拆成列表
        student = {"name": n, "age": a, "score": s}
        L.append(student)
    f.close()
    return L

源碼:    https://pan.baidu.com/s/1vVuH7OwNdn8vqaBKAivniQ
異常還沒處理...........

相關文章
相關標籤/搜索