2018-07-26文件操作

一 模塊管理和類函數(shù)

1.什么是模塊:一個(gè).py文件就是一個(gè)模塊

2.import :可以通過import關(guān)鍵字導(dǎo)入其他模塊
import 模塊名(.py文件名)

直接導(dǎo)入模塊的時(shí)候,相當(dāng)于把被導(dǎo)入模塊里面的內(nèi)容粘貼到import的位置

3.怎么使用模塊中的內(nèi)容,以及什么內(nèi)容是可以用的
import 模塊名 ----》導(dǎo)入模塊中的所有內(nèi)容
模塊名.

在模塊中聲明全局變量都可以使用(普通變量,函數(shù),類)

模塊:

name = 10
print(__name__)


def func_other():
    print('nihao')

調(diào)用模塊和模塊中的內(nèi)容

import other

print(other.name)
print('===')

print(other.func_other(), other.name)
結(jié)果:

other
10
===
nihao
None 10

4.from 模塊 import 內(nèi)容1,內(nèi)容2... ----》導(dǎo)入模塊中指定的內(nèi)容
使用內(nèi)容的時(shí)候,不用在被導(dǎo)入的變量或者函數(shù)或者類的前面加模塊名

模塊;

def func2():
    print('~~~~')
    return 100

在這里寫當(dāng)前模塊不需要被他模塊導(dǎo)入和其粘貼的代碼

if __name__ == '__main__':
    name = 1010
    print(name)

導(dǎo)入模塊內(nèi)容:

from other2 import func2

func2()
結(jié)果:

~~~~

5.阻止被導(dǎo)入的模塊中的代碼被粘貼到當(dāng)前模塊
一般情況下,除了函數(shù)的聲明和類的聲明以外,其他的代碼都需要放到這個(gè)if里面

name:是每一個(gè)模塊自帶的屬性,是用來保存當(dāng)前模塊的名字的.
當(dāng)正在執(zhí)行當(dāng)前模塊的時(shí)候,這個(gè)屬性的值是固定的'main',也就是'name'變成了'main'


if name == 'main':
# 這里面的代碼不會(huì)被其他模塊使用
pass

6.使用as重命名

import 模塊名 as 新的名字
form 模塊名 import 函數(shù)名 as 新的函數(shù)名


import math as my_math

print(my_math.pi)

from random import randint as my_rand

print(my_rand(1, 10))
結(jié)果:

3.141592653589793
4

二 文件操作

(所有)文件操作流程:打開文件-》操作文件(讀寫)-》關(guān)閉文件

1.打開文件 :open(文件路徑,打開的方式,編碼方式)
文件路徑(必填)---》決定打開哪個(gè)文件
打開方式(默認(rèn)值是‘r’)---》決定打開文件后是進(jìn)行什么樣的操作
‘r’ -讀操作(讀出來是字符串)
‘rb’/'br' - 讀操作(讀出來的是二進(jìn)制)
‘w’ - 寫操作(可以將文本數(shù)據(jù)寫入文件中)
‘wb’/'bw' - 寫操作(將二進(jìn)制數(shù)據(jù)寫入文件中)
‘a(chǎn)’ - 寫操作(追加)
‘+’ - 更新

文本編碼編碼方式 ---》 主要針對(duì)文件的讀寫(不用的操作系統(tǒng)默認(rèn)的方式不同,Windows->gbk,mac->utf-8)


if name == 'main':
pass
2. 文本文件讀寫

a.放在工程里面的文件,寫絕對(duì)路徑

 open()

(推薦)
b.將文件放到工程目錄下的某個(gè)位置,寫相對(duì)路徑(相當(dāng)于工程目錄):./相對(duì)路徑 或者 :/相對(duì)路徑
當(dāng)你的py文件直接放在工程下,想要使用open打開工程中的其他文件使用'./'
當(dāng)py文件在工程目錄的子目錄下面,想要用open打開工程中的其他文件使用'../'

open('./test1.txt') #在工程目錄下
在工程目錄下的子目錄下 open('./子目錄/文件名')
在工程目錄下的子目錄下的子目錄下 open('./子目錄/子目錄的子目錄/文件名')

1.打開文件
打開文件,返回文件句柄(文件代言人)

  f = open('./test1.txt', 'r', encoding='utf_8')

2.文件文件的讀操作('r'讀文件(獲取文件內(nèi)容))

文件.red() : 獲取文件內(nèi)容,并且返回
red(n) --> n 設(shè)置讀的長度

    content = f.read()
    print(content)

3.關(guān)閉文件 : 文件句柄.close()

    f.close()

3.文本文件的寫操作

打開文件

注意:以讀的方式打開,如果這個(gè)文件不存在,回報(bào)錯(cuò)
以寫的方式打開,如果這個(gè)文件不存在,就會(huì)創(chuàng)建這個(gè)文件

    f = open('./test1.txt', 'w', encoding='utf-8')

寫:文件句柄.write

'w':在寫的時(shí)候會(huì)清空文件原來的內(nèi)容,然后再往里面添加數(shù)據(jù)
'a': 在原文件內(nèi)容的最后添加新的數(shù)據(jù)

content = f.write('我好想你')
print(content)

關(guān)閉文件
f.close()

4.二進(jìn)制文件的讀寫
音頻、視頻、圖片文件、都是二進(jìn)制文件

 讀

    f = open('./11125412N-4.jpg', 'rb')
    image_data = f.read()
    # bytes:python中二進(jìn)制數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)文件
    print(type(image_data), image_data)
關(guān)閉文件

    f.close()

二進(jìn)制文件的寫操作

f = open('./new.jpg', 'wb')
f.write(image_data)
f.close()

5.通過with關(guān)鍵字取打開文件
with open() as 文件變量名:
文件操作

在文件操作結(jié)束后會(huì)自動(dòng)去關(guān)閉文件(省去一個(gè) .close)


     with open('./files/一人之下.mp4','rb') as f:
        mp4_data = f.read()

 寫
     with open('./new.mp4','wb') as f:
        f.write(mp4_data)
最后輸出結(jié)果

我好想你

4
<class 'bytes'> b' h后面是一大堆的存儲(chǔ)的二進(jìn)制就不輸出了

三 json文件

數(shù)據(jù)本地化:將數(shù)據(jù)保存到本地

json文件(文本文件),就是文件后綴是.json的文件。內(nèi)容必須是是json格式的內(nèi)容

json格式:
1.內(nèi)容是字符串
2.最外層是字典,字典里面是必須是鍵值對(duì)
3.最外層是數(shù)組(列表),數(shù)組里面的內(nèi)容必須是數(shù)組元素

json數(shù)據(jù)類型;
//最外面只能是一個(gè)字典,一個(gè)數(shù)組,一個(gè)字符串
//支持的數(shù)據(jù)類型:字符串("abc"),數(shù)字(100,33),布爾值(true,false)
//數(shù)組([1,23,"abc"]),字典({"key":"value"})
//null(None)

json是Python中內(nèi)置的一個(gè)模塊,專門用來處理json數(shù)據(jù)的

if name == 'main':
import json #每次需要Python的內(nèi)置函數(shù)的時(shí)候,都要導(dǎo)入模塊

1.json文件的讀操作

with open('./test.json', 'r', encoding='utf-8') as f:
    直接使用red去讀獲取到的字符串?dāng)?shù)據(jù),包含了json文件中的所有內(nèi)容(包含字符串)
       content = f.read()
       print(conten,type(conten))

load(文件對(duì)象):獲取指定json文件中的內(nèi)容,返回值就是json文件最外層的對(duì)應(yīng)的數(shù)據(jù)類型
object ---> dict
array ---> list
string ---> str
number ---> int/float
true/false ---> True/False
null ---> None

        contentn = json.load(f)
        print(contentn, type(contentn), contentn["score"][1])

2.json文件的寫操作


    with open('./new.json', 'w', encoding='utf-8') as f:
    打開文件
   
    dump(寫的內(nèi)容,文件對(duì)象)
      w_count = [
          {'name': 'a1', 'age': 18}, {'name': 'a2', 'age': 10}]
      json.dump(w_count, f)

練習(xí):輸入學(xué)生的姓名和年齡,保存到本地(下次打開還在)

    name = input('名字:')
    tel = input('電話:')
    student = {'name': name, 'tel': tel}

    try:
        with open('./student.json', 'r', encoding='utf-8') as f:
            all_student = json.load(f)
    except FileNotFoundError:
        all_student = []

    all_student.append(student)
    with open('./student.json', 'w', encoding='utf-8') as f:
        json.dump(all_student, f)

3.json模塊的其他操作

loads(字符串,編碼方式) ---》 將指定的字符串,轉(zhuǎn)換成json
將字符串轉(zhuǎn)換成字典\將字符串轉(zhuǎn)換成列表


    content = json.loads('"abc"',encoding='utf-8')
    print(content,type(content))

dumps(對(duì)象)
將對(duì)象轉(zhuǎn)換成json字符串
字典/列表轉(zhuǎn)換成符合json語法的json字符串(在Python中還是str)

    content = json.dumps(['aaa',1,True])
    # content = '["aaa",1,True]'
    print(content,type(content))

四 異常捕獲

出現(xiàn)異常(錯(cuò)誤)不想讓程序錯(cuò)誤,
try:
需要捕獲異常的代碼
except:
出現(xiàn)異常會(huì)執(zhí)行的代碼

try:
需要捕獲的代碼
except:錯(cuò)誤類型
捕獲到指定的錯(cuò)誤類型,才會(huì)執(zhí)行的代碼

if __name__ == '__main__':
    try:
        with open('./aaa.txt') as ff:
            print('打開成功')

    except FileNotFoundError:
        print('===')
        open('./aaa.txt','w')
打開成功
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、模塊管理和類 1.什么是模塊:一個(gè).py文件就是一個(gè)模塊 2.import : 可以通過import關(guān)鍵字導(dǎo)入...
    BIGBOSS_93d6閱讀 118評(píng)論 0 0
  • 函數(shù)模塊 1. 什么是模塊:一個(gè).py文件就是一個(gè)模塊 2.import:可以通過import關(guān)鍵字導(dǎo)入其他的模塊...
    Kris_Shin閱讀 195評(píng)論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,890評(píng)論 18 139
  • 名詞解釋 "event-loop": 事件循環(huán)"non-blocking": 非堵塞"callback": 回調(diào)函...
    coolheadedY閱讀 1,402評(píng)論 0 3
  • 時(shí)間過得很快,一直以來過得馬馬虎虎的我在今年面臨著單位的大考,這決定了我的未來能不能在這里有好的發(fā)展? ...
    紫寒_902e閱讀 130評(píng)論 0 0