4.CSV文件和二進(jìn)制文件

pythom默認(rèn)編碼格式是gbk,在pycharm里面寫(xiě)代碼是gbk形式跷跪,相應(yīng)也要用gbk的編碼轉(zhuǎn)成文本齐板,外面導(dǎo)入pycharm使用utf-8。

CSV文件

1.什么是CSV橡羞?
逗號(hào)分隔值(Comma-Separated Values济舆,CSV,有時(shí)也稱為字符分隔值签夭,因?yàn)榉指糇址部梢圆皇嵌禾?hào))椎侠,其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)。

  1. 什么是CSV文件 慎宾?
    CSV文件由任意數(shù)目的記錄組成浅悉,記錄間以某種換行符分隔;每條記錄由字段組成之宿,字段間的分隔符是其它字符或字符串苛坚,最常見(jiàn)的是逗號(hào)或制表符。通常等缀,所有記錄都有完全相同的字段序列娇昙。
    通常都是純文本文件txt,也可以excel表格打開(kāi)識(shí)別噪裕。
    3.python中的CSV模塊
import csv
dir(csv) #查看模塊下的方法

4.csv文件的寫(xiě)入操作

import csv
#使用數(shù)字和字符串的數(shù)字都可以
stus=[
    ['姓名','年齡','性別'],
    ['張三',14,'男'],
    ['李四',23,'女'],
    ['王五',18,'女'],
    ['鄭六',20,'男'],
]  #使用二維列表
with open('stuMESS.csv','w',newline='',encoding='utf-8') as f:
    wr=csv.writer(f)
    for s in stus:  #s遍歷二維列表里面的每一個(gè)一維列表
        wr.writerow(s)    #writerow控制換行
        #上面的for語(yǔ)句課直接寫(xiě)做:wr.writerows(stus)
        #入創(chuàng)建CSV文件時(shí)沒(méi)有指定newline='',則每寫(xiě)入一行將有一空行被寫(xiě)入

5.csv文件的讀取操作

import csv
with open('stuMESS.csv',encoding='gbk') as f:
    rd=csv.reader(f)
    stus=list(rd)
print('一次性打印')
print(stus)
print('\n逐行打印')
for row in stus:
    print(row)

6.DictReader和DictWriter
使用DictWriter類,可以寫(xiě)入字典形式的數(shù)據(jù)召衔,同樣鍵也是標(biāo)頭(表格第一行)祭陷。

使用DictReader可以像操作字典那樣獲取數(shù)據(jù),把表的第一行(一般是標(biāo)頭)作為key醇蝴∠牒保可訪問(wèn)每一行中那個(gè)某個(gè)key對(duì)應(yīng)的數(shù)據(jù)。
7.用字典形式寫(xiě)csv文件和二維列表寫(xiě)一樣

import csv
#使用數(shù)字和字符串的數(shù)字都可以
headers=['姓名','年齡','性別']
stus= [
    {'姓名':'張三','年齡':14,'性別':'男'},
    {'姓名':'李四','年齡':23,'性別':'女'},
    {'姓名':'王五','年齡':18,'性別':'女'},
    {'姓名':'鄭六','年齡':20,'性別':'男'}
          ]

with open('stuDICT.csv','w',newline='',encoding='gbk') as f:
    wr=csv.DictWriter(f,headers) #f是文件對(duì)象闸迷,header是鍵對(duì)象
    wr.writeheader()#把鍵寫(xiě)進(jìn)去
    wr.writerows(stus)#把字典內(nèi)容寫(xiě)進(jìn)去

8.使用reader函數(shù)俘枫,接收一個(gè)可迭代的對(duì)象(比如csv文件),能返回一個(gè)生成器今阳,就可以從其中解析出csv的內(nèi)容:比如下面的代碼可以讀取csv的全部?jī)?nèi)容茅信,以行為單位

import csv
with open('stuDICT.csv') as f:
    rd=csv.reader(f)
    for row in rd:
        print(row)

9.使用DictReader蘸鲸,和reader函數(shù)類似,接收一個(gè)可迭代的對(duì)象酌摇,能返回一個(gè)生成器窑多,但是返回的每一個(gè)單元格都放在一個(gè)字典的值內(nèi),而這個(gè)字典的鍵則是這個(gè)單元格的標(biāo)題(即列頭)埂息。

OrderedDict:有序字典,根據(jù)放入元素的先后順序進(jìn)行字典內(nèi)容的排序

import csv
with open('stuDICT.csv') as f:
    rd=csv.DictReader(f)
    for row in rd:
        print(row)

print('\n再次打開(kāi),只讀姓名出來(lái)')

with open('stuDICT.csv') as f:
    rd=csv.DictReader(f)
    names=[]
    for row in rd:
        names.append(row['姓名'])
    print(names)
image.png

10.統(tǒng)計(jì)文件‘關(guān)于python.txt’ 中所有字符(空格铲掐、制表符和換行符不用統(tǒng)計(jì))出現(xiàn)的次數(shù)琉闪,采用“字符:次數(shù)”的方式表示,以CSV方式存儲(chǔ)在“python字符統(tǒng)計(jì).txt”文件中。

with open('關(guān)于python.txt','r',encoding='utf-8') as f:
    s=f.read()#讀取的文本內(nèi)容存儲(chǔ)到變量s里面
d={}#創(chuàng)建一個(gè)空字典
for c in s:
    if c not in d:
        d[c]=1
    else:
        d[c]+=1
        #d[c]=d.get(c,0)+1
        #d.get(c,0)是從字典d中去除鍵為C的值砂碉,如果沒(méi)有這個(gè)鍵增蹭,則返回0
del d[' ']#刪除空格
#del d['\t']#刪除制表符  可能是txt文本沒(méi)有制表符
del d['\n']#刪除換行符
mess=''
for key in d:
    mess+=key+':'+str(d[key])+','     #以鍵:值的形式表現(xiàn)
mess=mess[0:len(mess)-1]
with open('python字符統(tǒng)計(jì).txt','w',encoding='utf-8') as f:
    f.write(mess)
image.png

11.
image.png
'''
import csv
with open('5班學(xué)生信息.txt','r') as f:
    s=f.read() #讀進(jìn)字符
print(s)
with open('5班學(xué)生信息.csv','w',encoding='gbk') as f:
    w=f.write(s)
print(w)
'''
import csv
with open('5班學(xué)生信息.txt') as fr:
    lines=fr.readlines()  #讀進(jìn)來(lái)存儲(chǔ)成一個(gè)列表
with open('5班學(xué)生信息.csv','w',newline='') as fw:
    wr=csv.writer(fw)   #創(chuàng)建writer對(duì)象滋迈,使用于列表,Dictreader用于字典
    header=['學(xué)號(hào)','姓名','性別','年齡','聯(lián)系方式']#寫(xiě)進(jìn)去是一個(gè)一維列表
    wr.writerow(header)
    for line in lines:
        curr=line.strip().split(',')#對(duì)于當(dāng)前行幕侠,去掉末行的換行符再做切割碍彭,curr是一個(gè)列表
        if curr:
            wr.writerow(curr)

12.
image.png
import csv

print('5班年齡為19歲的學(xué)生信息如下:')
print('%-6s%-6s%-6s'%('姓名','年齡','性別'))
with open('5班學(xué)生信息.csv','r') as f:
    rd=csv.DictReader(f)
    for row in rd:
        if int(row['年齡'])==19:
            print('%-6s%-8s%-6s'%(row['姓名'],row['年齡'],row['性別']))

13.小明已經(jīng)有了幾項(xiàng)熱愛(ài)的體育運(yùn)動(dòng)在sportsList中庇忌,現(xiàn)在請(qǐng)你添加上“網(wǎng)球”和“羽毛球”,去掉“冰球”

sportsList=['跑步','爬山','游泳','冰球','擊劍']
sportsList.extend(['網(wǎng)球','羽毛球'])
sportsList.remove('冰球')
print(sportsList )

13.請(qǐng)補(bǔ)充橫線處的代碼疏橄,讀入正整數(shù)n和m略就,生成m個(gè)1到1000之間的隨機(jī)整數(shù),顯示這些隨機(jī)數(shù)中能被n整除的數(shù)字

import random
n=int(input('請(qǐng)輸入除數(shù)(int): '))
m=int(input('請(qǐng)輸入隨機(jī)數(shù)的個(gè)數(shù)(int): '))
t=[] #因?yàn)橄旅媸褂昧肆斜淼腶ppend方法
for i in range(m):
    t.append(random.randint(1,1000))
print('這些隨機(jī)數(shù)是',t)
ok=[]
for i in t:
    if i%n==0:
        ok.append(i)
if not ok:
    print('沒(méi)找到合適的隨機(jī)數(shù)')
else:
    print('能整除的數(shù)有',ok)

15.
image.png
'''
已知“汽車(chē)報(bào)價(jià)信息.csv”中存放有汽車(chē)產(chǎn)品型號(hào)及其報(bào)價(jià)范圍立砸,
從文件中讀取出來(lái)初茶,并根據(jù)用戶要選擇的型號(hào)或者價(jià)格范圍打印出相關(guān)信息浊闪。
'''

import csv

type=input('你想要查找的型號(hào)是螺戳,如果無(wú)要求則直接回車(chē):  ')
s=input('你的接受價(jià)格(單位:萬(wàn))是 ,如果無(wú)要求則直接回車(chē): ')
if s:
    price=int(s)
else:
    price=0

with open('汽車(chē)報(bào)價(jià)信息.csv') as f:
    rd=csv.DictReader(f)
    for row in rd:
        xinghao=row['型號(hào)']     #獲取汽車(chē)型號(hào)
        minPrice=int(row['最低報(bào)價(jià)'])   #獲取最低報(bào)價(jià)
        maxPrice=int(row['最高報(bào)價(jià)'])   #獲取最高報(bào)價(jià)
        if (type=='無(wú)' or type in xinghao) and \
           (price==0 or minPrice<=price<=maxPrice):
            print(xinghao,minPrice,maxPrice)

print('查找結(jié)束!')    


jieba模塊

什么是jieba(二級(jí)考證必選庫(kù)): Python中的第三方中文分詞擴(kuò)展庫(kù)倔幼,支持三種分詞模式:
1)精確模式:適合文本分析
2)全模式:速度快,但不能解決歧義
3)搜索引擎模式翩腐,適用于搜索引擎分詞

Jieba中的主要函數(shù):
1)jieba.lcut(x):精確模式膏燃,返回中文文本x分詞后的x變量
2)jieba.lcut(x, cut_all=True) :全模式,返回中文文本x分詞后的x變量
3)jieba.lcut_for_search(x):搜索引擎模式等龙,返回…..
4)jieba.add_word(w):向分詞詞典中添加新詞w伶贰,其中w為中文詞組

import jieba
s=jieba.lcut('中國(guó)人民終于站起來(lái)了,反抗帝國(guó)主義的入侵')
print(s)
jieba.add_word('站起來(lái)')   #精準(zhǔn)切法
s=jieba.lcut('中國(guó)人民終于站起來(lái)了泥畅,反抗帝國(guó)主義的入侵')
print(s)
image.png

1.統(tǒng)計(jì)文件‘關(guān)于python.txt’ 中所有詞語(yǔ)出現(xiàn)的次數(shù)们豌,采用“詞語(yǔ):次數(shù)”的方式表示,以CSV方式存儲(chǔ)在“python詞語(yǔ)統(tǒng)計(jì).txt”文件中障癌。
'''
統(tǒng)計(jì)文件‘關(guān)于python.txt’ 中所有詞語(yǔ)出現(xiàn)的次數(shù)辩尊,采用“詞語(yǔ):次數(shù)”的方式表示,
以CSV方式存儲(chǔ)在“python詞語(yǔ)統(tǒng)計(jì).txt”文件中轿亮。

import jieba

with open('關(guān)于python.txt','r') as f:
    s=f.read()

words=jieba.lcut(s)

d={}

for c in words:
    if c not in (' ','\t','\n'):
        d[c]=d.get(c,0)+1
    #d.get(c,0)是從字典d中取出鍵為c的值胸墙,如果沒(méi)有這個(gè)鍵,則返回0


mess=[]
for key in d:
    mess.append("{}:{}".format(key,d[key]))

with open('python詞語(yǔ)統(tǒng)計(jì)1.txt','w',encoding='utf-8') as f:
    f.write(','.join(mess))

二進(jìn)制文件的讀寫(xiě)流程

1)使用open()以某個(gè)指定的模式加’b’打開(kāi)文件
2)以該模式操作文件存取的都是字節(jié)但骨,也就是bytes或者bitearray,而不是字符
例如:
f.write(b’hello’):將字符串“hello”轉(zhuǎn)換成字節(jié)數(shù)據(jù)再寫(xiě)入文件中
f.read(n):從文件中讀入至多n個(gè)字節(jié)掠抬,返回一個(gè)bytes對(duì)象
3)關(guān)閉文件f.close(),在沒(méi)有使用with語(yǔ)句下
1.查看字節(jié)碼校哎。

#123.txt
hi, sun
中午好
hi, stars

filename=input('請(qǐng)輸入二進(jìn)制文件的名稱: ')
with open(filename,'rb') as f:
    index=0  #用來(lái)下面統(tǒng)計(jì)換行
    while True:
        temp = f.read(1)#每次讀一個(gè)字節(jié)進(jìn)來(lái)
        if len(temp) ==0:#如果讀到的字節(jié)為0,說(shuō)明文件到達(dá)尾部
            break #出去
        else:
            print('%3s' % temp,end='')#顯示當(dāng)前字節(jié)腰奋,顯示內(nèi)容
            index=index+1#行內(nèi)字?jǐn)?shù)+1
        if index ==10:#這里換行抱怔,每行打印10個(gè)字節(jié)就換行
            index=0#重置
            print()

image.png

輸入的二進(jìn)制文件也可以是圖片.png形式
2.二進(jìn)制文件的隨機(jī)訪問(wèn) 文件的讀取和寫(xiě)入一般是從當(dāng)前位置(打開(kāi)文件時(shí)位置是0)操作到文件的結(jié)尾(EOF),即按順序進(jìn)行訪問(wèn)。
文件對(duì)象也支持seek()方法绕沈,它通過(guò)字節(jié)偏移量將讀取/寫(xiě)入位置移動(dòng)到文件中的任意位置帮寻,從而實(shí)現(xiàn)文件的隨機(jī)訪問(wèn)。

具體語(yǔ)法如下: f.seek(offset[, whence])
說(shuō)明:offset -- 開(kāi)始的偏移量固逗,也就是代表需要移動(dòng)偏移的字節(jié)數(shù)烫罩;

whence:可選,默認(rèn)值為 0贝攒,表示要從哪個(gè)位置開(kāi)始偏移;其值可以是os.SEEK_SET哈踱、os.SEEK_CUR梨熙、os.SEEK_END,也可以用0邪财、1、2表示卧蜓,其意義分別是:0代表從文件開(kāi)頭開(kāi)始算起,1代表從當(dāng)前位置開(kāi)始算起榨惠,2代表從文件末尾算起盛霎。

3.二進(jìn)制文件的隨機(jī)定位

from os import SEEK_END #定向?qū)肽K成員的方法,可以減輕代碼負(fù)重
with open('ran.txt','w+b') as f:  #w+模式的運(yùn)作
    #寫(xiě)入文件
    f.write(b'hi,Sum\n')
    f.write(b'hi,python\n')
    f.write(b'hi,morning\n')

#隨機(jī)讀取文件的指定位置信息
    print('\n當(dāng)前文件內(nèi)容是: ')
    f.seek(0)#文件的索引從零開(kāi)始
    content=f.read()
    print(content)  #用content變量接受
    print('文件長(zhǎng)度是',len(content))
    print()

    f.seek(3)#去到3號(hào)位
    print('當(dāng)前位置是',f.tell())#顯示當(dāng)前存取的位置
    print('讀3個(gè)字節(jié):',f.read(3))
    print('當(dāng)前位置是', f.tell())  # 顯示當(dāng)前存取的位置
    print('讀4個(gè)字節(jié):', f.read(4))
    f.seek(-8,SEEK_END)#os.SEEK_END表示結(jié)尾期揪,也可以寫(xiě)成2
    print('當(dāng)前位置是', f.tell())  # 顯示當(dāng)前存取的位置
    print('讀8個(gè)字節(jié):', f.read(8))
#下面是修改文件
    f.seek(0)#回到零號(hào)位
    f.write(b'afternoon')
    print('\n修改后的內(nèi)容是\n')
    f.seek(0)#定位到文件開(kāi)始
    content=f.read()
    print(content)
    print('文件的長(zhǎng)度是',len(content))
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凤薛,一起剝皮案震驚了整個(gè)濱河市诞仓,隨后出現(xiàn)的幾起案子墅拭,更是在濱河造成了極大的恐慌,老刑警劉巖谍婉,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穗熬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡死陆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)别凤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)规哪,“玉大人塌衰,你說(shuō)我怎么就攤上這事蝠嘉”蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵杜恰,是天一觀的道長(zhǎng)仍源。 經(jīng)常有香客問(wèn)我,道長(zhǎng)笼踩,這世上最難降的妖魔是什么嚎于? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮镣屹,結(jié)果婚禮上价涝,老公的妹妹穿的比我還像新娘持舆。我一直安慰自己色瘩,他們只是感情好逸寓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著泥栖,像睡著了一般勋篓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上譬嚣,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天拜银,我揣著相機(jī)與錄音遭垛,去河邊找鬼操灿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趾盐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溃卡,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瘸羡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搓茬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起卷仑,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锡凝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窜锯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吞瞪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年芍秆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翠勉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迹栓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出克伊,到底是詐尸還是另有隱情,我是刑警寧澤不从,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布犁跪,位于F島的核電站,受9級(jí)特大地震影響寝优,放射性物質(zhì)發(fā)生泄漏枫耳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一钻心、第九天 我趴在偏房一處隱蔽的房頂上張望铅协。 院中可真熱鬧,春花似錦狐史、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)突颊。三九已至,卻和暖如春爬橡,著一層夾襖步出監(jiān)牢的瞬間棒动,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工柜裸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疙挺。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓铐然,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沥阳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子自点,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355