day11-文件操作

1.生成式

格式1: - 結(jié)果是一個(gè)生成器(迭代器)
表達(dá)式 for 變量 in 序列
--> 展開:
def func():
for 變量 in 序列:
yield 表達(dá)式

注意: 表達(dá)式的結(jié)果就是每次循環(huán)生成器產(chǎn)生的數(shù)據(jù)
這兒的for循環(huán)可以控制生成器產(chǎn)生的數(shù)據(jù)的個(gè)數(shù)撼嗓,和產(chǎn)生的值

gen1 = (10 for x in range(10))
print(gen1)
for x in range(2):
    print(next(gen1))

格式2:
表達(dá)式 for 變量 in 序列 if 條件語句
展開:
def func():
for 變量 in 序列:
if 條件語句:
yield 表達(dá)式

gen3 =(x for x in range(3) if x % 2)
print(next(gen3))

M = [i for i in range(1, 100) if i % 2 != 0]  # 將一個(gè) list 映射為另一個(gè) list琼了,每個(gè)元素設(shè)為變量i
print(M)
b = (i for i in range(1, 10) if i % 2 == 0)
print(b)
a = [1 for i in range(1, 100) if i % 2 == 0]  # 將列表range(n)映射到列表x玻熙,每個(gè)元素設(shè)為常量1
print(a)

squared = {x for x in [1, 1, 2]}
print(squared)

# 交換字典的鍵值對
dict1 = dict((x, y) for y, x in {'a': 1, 'b': 2}.items())
print(dict1)

運(yùn)行:


image.png

2.模塊的使用

1.什么是模塊
python中一個(gè)py文件就是一個(gè)模塊
函數(shù) - 對功能進(jìn)行封裝 - 獲取當(dāng)前時(shí)間對應(yīng)的代碼封裝到函數(shù)中
模塊 - 對多個(gè)功能和數(shù)據(jù)進(jìn)行封裝 - 將所有和時(shí)間相關(guān)的函數(shù)或者變量放到一個(gè)py文件中
包 - 對多個(gè)模塊進(jìn)行封裝 - 將所有和時(shí)間相關(guān)的py文件放到一個(gè)文件夾中
什么是包 : 含有init.py文件的文件夾

2.怎么關(guān)聯(lián)多個(gè)模塊
方式1:
import 模塊名 - 將指定的模塊導(dǎo)入到當(dāng)前模塊中(模塊名就是py文件名)

說明:
a.執(zhí)行import時(shí)捻爷,會執(zhí)行對應(yīng)模塊的py文件中的代碼
b.import導(dǎo)入模塊時(shí)讳嘱,會檢查當(dāng)前模塊之前是否已經(jīng)導(dǎo)入過蛔外,如果已經(jīng)導(dǎo)入過秘通,就不再導(dǎo)入
c.通過import 導(dǎo)入模塊后罪佳,可以通過 模塊名.全局變量 去使用被導(dǎo)入的模塊中的內(nèi)容

import test1

a = test1.test1_a
print(a)

方式2:
from 模塊名 import 變量/函數(shù)名 - 導(dǎo)入模塊中指定的變量或者函數(shù)

說明:
a.執(zhí)行到導(dǎo)入模塊的語句時(shí)却舀,還是會執(zhí)行對應(yīng)模塊的py文件中的代碼
b.導(dǎo)入模塊時(shí)虫几,會檢查當(dāng)前模塊之前是否已經(jīng)導(dǎo)入過,如果已經(jīng)導(dǎo)入過挽拔,就不再導(dǎo)入
c.使用時(shí)只能使用import后面的變量/函數(shù)辆脸,而且用的時(shí)候不用在前面模塊名
d.import后面可以使用逗號將多個(gè)變量/函數(shù)隔開,也可以使用*將模塊中所有的全局變量和函數(shù)一起導(dǎo)入

from test1 import test1_a

print(test1_a)

3.重命名
import 模塊名 as 新模塊名
from 模塊名 import 變量名/函數(shù)名 as 新變量名/函數(shù)名

4.包的導(dǎo)入中的代碼
import 包名 - 會直接執(zhí)行包中的 init.py文件

from 包名 import 模塊名
from 包名.模塊名 import 變量

import test
import test.test1
print(test.test1.test1_a)

運(yùn)行:


image.png

3.選擇性導(dǎo)入

在模塊中將不需要其他模塊導(dǎo)入和執(zhí)行的代碼寫到
if __ name __ == ' main ' 語句中螃诅。這樣就能阻止代碼被其他模塊執(zhí)行
聲明在這里面的變量也不會被其他模塊導(dǎo)入

原理:因?yàn)槊總€(gè)模塊都有一個(gè)name,他的默認(rèn)值是模塊對應(yīng)的py文件的名字啡氢。
當(dāng)正在直接執(zhí)行模塊的時(shí)候,模塊的name屬性值就會變成'main'

import test1

4.文件操作

r"""
1.數(shù)據(jù)本地化
將數(shù)據(jù)以文件的形式术裸,存儲到本地磁盤中倘是。
(程序中變量保存的數(shù)據(jù)都是存到內(nèi)存中,當(dāng)程序運(yùn)行結(jié)束袭艺,內(nèi)存中的數(shù)據(jù)全部銷毀)

常見的數(shù)據(jù)本地化方式:
二進(jìn)制文件(包含音頻搀崭,視頻,壓縮包等)匹表,普通文本文件,json和xml文件,數(shù)據(jù)庫文件

2.文件操作(讀和寫)
文件操作的步驟:
打開文件(新建文件) - 文件操作(讀和寫) - 關(guān)閉文件

3.打開文件
open(file,mode='r',...,encoding=None) - 返回的是被打開的文件對象(文件句柄)
說明:
file - 字符串门坷;需要打開的文件的路徑(可以是絕對路徑,也可以是相對路徑)
絕對路徑(一般不用):C:\Users\hai\AppData\Local\SogouExplorer(完整路徑)
相對路徑:相對當(dāng)前的py文件對應(yīng)的目錄
aaa.txt 或者 ./aaa.txt
./ - 當(dāng)前目錄(可省略)
../ - 當(dāng)前目錄的上層目錄
.../ - 當(dāng)前目錄的上上層目錄
......

mode - 打開方式袍镀;打開文件后不同的操作默蚌,對應(yīng)的打開方式不一樣
'r' - 默認(rèn)值,以讀的方式打開文件苇羡,讀出來的是文本(字符串)
'w' - 以寫的方式打開文件
'rb'绸吸、'br' - 以讀的方式打開,讀出來的數(shù)據(jù)是二進(jìn)制
'wb'、'bw' - 以寫的方式打開锦茁,寫二進(jìn)制數(shù)據(jù)到文件中
'a' - 以寫的方式打開攘轩,追加(寫字符串)
'+' - 以讀寫的方式打開

encoding - 文件的編碼方式,一般賦值為'utf-8'
utf-8 - 支持中文編碼
gbk - 不支持中文編碼

以讀的形式打開一個(gè)文本文件码俩,保存到變量f中度帮。對f操作就是對被打開的文件進(jìn)行操作
"""
f = open('aaa.txt', encoding='utf-8')

"""
文件的讀操作
文件對象.read() - 從文件讀寫位置開始讀到文件結(jié)尾(默認(rèn)獲取文件中所有的內(nèi)容)
文件對象.readline() - 讀一行內(nèi)容
"""

  • 讀文件所有的內(nèi)容
 content = f.read()
 print(content)
  • 讀一行
 content = f.readline()
 print('===:', content)
  • 練習(xí):將文件中的內(nèi)容讀完,要求一行一行的讀
content = f.readline()
while content:
    print(content)
    content = f.readline()

5.文件的寫操作
文件對象.write(字符串) - 將字符串內(nèi)容寫到文件中(會完全覆蓋原文件中的內(nèi)容)

 f = open('aaa.txt', 'w', encoding='utf-8')
 f.write('你好嗎稿存?')

6.關(guān)閉
文件對象.close() - 關(guān)閉指定的文件

f.close()
print(f.closed)  # 判斷文件是否關(guān)閉

5.二進(jìn)制文件的讀和寫

1.open方法的另外一種寫法:
with open(文件路徑, 讀寫方式, encoding=編碼方式) as 文件對象:
文件操作

打開文件笨篷,將文件存在文件對象中。當(dāng)文件操作完成會自動關(guān)閉

with open('aaa.txt', encoding='utf-8') as f:
    print(f.read())

print(f.closed)

2.二進(jìn)制文件的讀
普通文本文件也可以以二進(jìn)制的形式讀和寫
只要將讀寫方式設(shè)置為'rb'/'br' 就可以了瓣履。讀出來的數(shù)據(jù)直接就是二進(jìn)制數(shù)據(jù)
注意: 二進(jìn)制操作不能設(shè)置編碼方式(編碼方式只是針對文本文件)

with open('aaa.txt', 'rb') as f:
    content = f.read()
    print(content, type(content))

with open('image.jpg', 'rb') as f:
    content = f.read()
    print(content, type(content))

with open('imge.jpg', 'wb') as f:
    f.write(content)

3.文件不存在
當(dāng)以讀的方式打開一個(gè)不存在的文件率翅,會報(bào)錯(cuò)誤
當(dāng)以寫的形式打開一個(gè)不存在文件,不會報(bào)錯(cuò)袖迎,并且會創(chuàng)建這個(gè)文件

6.文件操作的應(yīng)用

使用數(shù)據(jù)的時(shí)候去本地文件中去數(shù)據(jù)
數(shù)據(jù)修改后冕臭,將新的數(shù)據(jù)更新到本地文件中

  • 寫一個(gè)程序統(tǒng)計(jì)當(dāng)前程序執(zhí)行次數(shù).
with open('num.txt') as f:
    count = int(f.read())    # 讀到的是字符串
    print('第%d次執(zhí)行程序' % count)
count += 1
with open('num.txt', 'w') as f:
    f.write(str(count))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市燕锥,隨后出現(xiàn)的幾起案子辜贵,更是在濱河造成了極大的恐慌,老刑警劉巖脯宿,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件念颈,死亡現(xiàn)場離奇詭異,居然都是意外死亡连霉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門嗡靡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跺撼,“玉大人,你說我怎么就攤上這事讨彼∏妇” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵哈误,是天一觀的道長哩至。 經(jīng)常有香客問我,道長蜜自,這世上最難降的妖魔是什么菩貌? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮重荠,結(jié)果婚禮上箭阶,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好仇参,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布嘹叫。 她就那樣靜靜地躺著,像睡著了一般诈乒。 火紅的嫁衣襯著肌膚如雪罩扇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天怕磨,我揣著相機(jī)與錄音暮蹂,去河邊找鬼。 笑死癌压,一個(gè)胖子當(dāng)著我的面吹牛仰泻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滩届,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼集侯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帜消?” 一聲冷哼從身側(cè)響起棠枉,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泡挺,沒想到半個(gè)月后辈讶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娄猫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年贱除,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳溺。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡月幌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悬蔽,到底是詐尸還是另有隱情扯躺,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布蝎困,位于F島的核電站录语,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏禾乘。R本人自食惡果不足惜澎埠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盖袭。 院中可真熱鬧失暂,春花似錦彼宠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至决记,卻和暖如春摧冀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背系宫。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工索昂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扩借。 一個(gè)月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓椒惨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親潮罪。 傳聞我的和親對象是個(gè)殘疾皇子康谆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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

  • 一、recode 1.匿名函數(shù) 函數(shù)名 = lambda 參數(shù)列表:返回值參數(shù)列表: 變量名1嫉到,變量名2 函數(shù)體是...
    大漠判官1閱讀 212評論 0 0
  • 一回顧 """ 1.匿名函數(shù) 函數(shù)名 = lambda 參數(shù)列表:返回值參數(shù)列表: 變量名1沃暗,變量名2 函數(shù)體是一...
    龍神海王閱讀 188評論 0 0
  • 模塊的使用 1、導(dǎo)入模塊 """python中一個(gè).py文件就是一個(gè)模塊可以通過import或者from impo...
    Heyjoky閱讀 144評論 0 0
  • 1.模塊的使用 1.什么是模塊:python中一個(gè)py文件就是一個(gè)模塊何恶∧踝叮可以通過import或者from-impo...
    PythonLi閱讀 226評論 0 0
  • 一、模塊的使用 什么時(shí)候使用模塊? 將具有相同的功能的函數(shù)和數(shù)據(jù)封裝到一起 1.導(dǎo)入模塊 python中一個(gè)py文...
    留級是不可能留級的閱讀 112評論 0 0