久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python中常用的文件讀寫(xiě)方法(txt文本文件,,excel文件,,CVS文件,mat文件)

 hdzgx 2020-01-04

一,、txt類(lèi)文本文件的讀寫(xiě)

        使用python處理數(shù)據(jù)文件較多,,而且大部分?jǐn)?shù)據(jù)文件保存在文本文件中(例如:‘  .txt   ’,  '  .json  '   文件) 

        讀取文本文件的主要步驟分為:a)打開(kāi)目標(biāo)文件;  b)獲取文件內(nèi)數(shù)據(jù),;  c)關(guān)閉文件

        打開(kāi)文件的一般方式為:

f=open(file_name,access_mode = 'r',buffering = -1)

其中 filen_ame即為目標(biāo)文件名,,輸入為字符串形式;access_mode = 'r' 表示執(zhí)行功能 ,?!畆’ 表示讀取(read),;‘w’ 表示寫(xiě)入(write); 'a'表示增加(add),,也是寫(xiě)入的一種,直接在已存在文本數(shù)據(jù)后面新增數(shù)據(jù) ,;buffering = -1指定緩存方式,,-1表示模型緩存,0表示不緩存,,1表示緩存一行,,n表示緩存n行(沒(méi)有特殊性能要求,該參數(shù)不做修改,,直接默認(rèn)即可)

      由于文本文件內(nèi)容編碼方式千變?nèi)f化,,很多時(shí)候直接用open()讀寫(xiě)會(huì)出現(xiàn)編碼錯(cuò)誤的問(wèn)題,,例如:

          UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)   

python代碼里稍不注意就會(huì)出現(xiàn)這樣的錯(cuò)誤,特別是在Linux環(huán)境下,,如果python代碼里面出現(xiàn)中文或者異常符號(hào),,運(yùn)行代碼時(shí)候就會(huì)出現(xiàn)這樣的錯(cuò)誤。此時(shí)可以在代碼的起始位置增加:# code = 'utf-8'  或者   # coding = UTF-8,最佳的處理方式是引入sys模塊,。

  1. import sys
  2. reload(sys)
  3. sys.setdefaultencoding('utf-8') # utf-8可以根據(jù)需喲更換成其他編碼方式

而基于文本文件讀寫(xiě)遇到這樣的錯(cuò)誤,,則推薦用python的另外一個(gè)模塊codecs.

fw = codecs.open('test1.txt','a','utf-8')

或者使用with來(lái)實(shí)現(xiàn)代碼:

with codecs.open('文件名','a',encoding = 'utf-8') as file:

codecs模塊可以指定一個(gè)編碼打開(kāi)文件,,使用這個(gè)方法打開(kāi)的文件讀取返回的將是unicode,。寫(xiě)入時(shí),如果參數(shù) 是unicode,,則使用open()時(shí)指定的編碼進(jìn)行編碼后寫(xiě)入,;如果是str,則先根據(jù)源代碼文件聲明的字符編碼,,解碼成unicode后再進(jìn)行前述 操作,。相對(duì)內(nèi)置的open()來(lái)說(shuō),這個(gè)方法比較不容易在編碼上出現(xiàn)問(wèn)題,。

一下是幾種常見(jiàn)的文本文件讀取數(shù)據(jù)代碼:

  1. ## 讀取文件數(shù)據(jù)的三種方法
  2. # 方法一 : read(),直接將整個(gè)文本內(nèi)的數(shù)據(jù)讀取到一個(gè)字符串中,。讀取整個(gè)文本時(shí)候可以,但是讀取多行多列數(shù)據(jù)的時(shí)候不推薦,。
  3. with codecs.open('test.txt','r',encoding = 'utf-8') as file: # 打開(kāi)文件
  4. data = file.read() # 讀取數(shù)據(jù),,data為整個(gè)文本文件里面的內(nèi)容,為字符串形式,。
  5. file.close() # 關(guān)閉文件
  6. # 方法二 : readline(),一行一行的讀取,,這種操作在以行為單位的數(shù)據(jù)讀取時(shí)候比較方便,適合較大數(shù)據(jù)文件
  7. with codecs.open('test.txt','r',encoding = 'utf-8') as file: # 打開(kāi)文件
  8. while True:
  9. data_i = file.readline() # 讀取第i行的數(shù)據(jù),,fata_i即為第i行數(shù)據(jù),,是字符串形式,可以進(jìn)行數(shù)據(jù)處理
  10. file.close() # 關(guān)閉文件
  11. # 方法三 : readlines(),直接讀取整個(gè)文本文件數(shù)據(jù)形成一個(gè)list,每一行數(shù)據(jù)對(duì)應(yīng)list中的一個(gè)元素(字符串形式)
  12. with codecs.open('test.txt','r',encoding = 'utf-8') as file: # 打開(kāi)文件
  13. data = file.readlines() # data 為一個(gè)list,,每個(gè)元素是一行的數(shù)據(jù)
  14. for data_i in data:
  15. data_i.rstrip('\n') # data_i為第i行數(shù)據(jù)是一個(gè)字符串,,但是結(jié)尾后換行符'\n',需要去掉,。
  16. file.close() # 關(guān)閉文件

文本文件的寫(xiě)入有兩種情況,,分為一次性寫(xiě)入與逐行寫(xiě)入。

  1. # 寫(xiě)入的方式有兩種,,一種是一次性寫(xiě)入,,一種是逐行寫(xiě)入,在后面增加新內(nèi)容
  2. # 方法一 : 一次性寫(xiě)入'w'
  3. with codecs.open('test.txt','w',encoding = 'utf-8') as file:
  4. file.write('數(shù)據(jù)內(nèi)容或者變量')
  5. file.close()
  6. # 方法二 :逐行寫(xiě)入,,增加新內(nèi)容,,適用于循環(huán)條件下
  7. with codecs.open('test.txt','a',encoding = 'utf-8') as file:
  8. for i in range(10):
  9. file.write('每次循環(huán)的數(shù)據(jù)')
  10. file.close()

Json文件是一種特殊的文本文件,,寫(xiě)入方法并不是write,而是json.dump()

  1. with codecs.open('test.json','a',encoding = 'utf-8') as file:
  2. # 假設(shè)變量為一個(gè)list
  3. list = [1,2,3,4,5]
  4. json.dump(list,file,ensure_ascii = False,indent = 2)
  5. # ensure_ascii = False 指定輸出為中文,,否則輸出為編碼
  6. # indent = 2 是指定每個(gè)字之間的間距

二,、 excel文件的讀寫(xiě) 

test.xlsx
ID Name age scors
101 Tom 12 9
102 Lucy 14  
103 Tomas   7
104 Anna 16  
105 Andy    
106 Jack 12 5
107 Dave   6
201 Hiton 10 7
206 Ben 15 10
203 Joy 14  

如表格test.xlsx所示,我需要讀取表格內(nèi)部數(shù)據(jù)信息,,但我特意部分信息缺失,。列表操作有很多,例如:

a)獲取excel文件中所有表格

b)根據(jù)表格獲取對(duì)應(yīng)表格內(nèi)的數(shù)據(jù)信息

c)獲取表格的行數(shù),,列數(shù)

d)整行或者整列的切片處理

e)獲取指定位置的數(shù)據(jù)內(nèi)容

  1. import xlrd
  2. # 打開(kāi)文件
  3. workbook = xlrd.open_workbook(r'./test.xlsx')
  4. # a)獲取excel文件中所有表格
  5. sheet = workbook.sheet_names()
  6. print(sheet) # 輸出為['class_one'],是一個(gè)list類(lèi)型,,每一個(gè)元素對(duì)應(yīng)一個(gè)表名
  7. # b)根據(jù)表格索引或者名稱(chēng)獲取對(duì)應(yīng)表格內(nèi)的數(shù)據(jù)信息
  8. # 根據(jù)索表名引號(hào)獲取表格
  9. data1 = workbook.sheet_by_index(0)
  10. # 根據(jù)表名獲取表格
  11. data2 = workbook.sheet_by_name(sheet[0])
  12. # c)獲取表格的行數(shù),列數(shù)
  13. # 表格的行數(shù)
  14. num_row = data1.nrows
  15. print(num_row) # 輸出為11,,該方式讀取將列名一起讀入,,如果要對(duì)數(shù)據(jù)進(jìn)行處理,第一行數(shù)據(jù)需要去除
  16. # 表格的列數(shù)
  17. num_col = data2.ncols
  18. print(num_col) # 輸出為4
  19. # d)整行或者整列的切片處理
  20. data_row = data1.row_values(0)
  21. print(data_row) # 輸出['ID','Name','age','scors']為一個(gè)list類(lèi)型,每個(gè)元素為一個(gè)字符串
  22. data_col = data2.col_values(0)
  23. print(data_col) # 輸出['ID','101','102','103','104','105','106','107','201','206','203']
  24. # e)獲取指定位置的數(shù)據(jù)內(nèi)容
  25. print(data1.cell(2,1)) # 輸出第三行第二列的數(shù)據(jù)信息 text:'Lucy'
  26. print(data2.cell(2,1).value) # 輸出第三行第二列的數(shù)據(jù)內(nèi)容 Lucy

對(duì)excel文件的寫(xiě)入操作:

  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. from xlwt import *
  4. #需要xlwt庫(kù)的支持
  5. #import xlwt
  6. file = Workbook(encoding = 'utf-8')
  7. #指定file以u(píng)tf-8的格式打開(kāi)
  8. table = file.add_sheet('data')
  9. #指定打開(kāi)的文件名
  10. data = {
  11. "1":["張三",150,120,100],
  12. "2":["李四",90,99,95],
  13. "3":["王五",60,66,68]
  14. }
  15. #字典數(shù)據(jù)
  16. ldata = []
  17. num = [a for a in data]
  18. #for循環(huán)指定取出key值存入num中
  19. num.sort()
  20. #字典數(shù)據(jù)取出后無(wú)需,,需要先排序
  21. for x in num:
  22. #for循環(huán)將data字典中的鍵和值分批的保存在ldata中
  23. t = [int(x)]
  24. for a in data[x]:
  25. t.append(a)
  26. ldata.append(t)
  27. for i,p in enumerate(ldata):
  28. #將數(shù)據(jù)寫(xiě)入文件,i是enumerate()函數(shù)返回的序號(hào)數(shù)
  29. for j,q in enumerate(p):
  30. # print i,j,q
  31. table.write(i,j,q)
  32. file.save('data.xlsx')

三,、 CVS文件讀寫(xiě)

cvs文件也是常用的數(shù)據(jù)文件形式之一,讀取一般有兩種,,python自帶的cvs模塊,,以及pandas里面的讀取工具。在這里介紹一下python自帶模塊,,pandas工具相當(dāng)強(qiáng)大,后面統(tǒng)一整理,。

CVS讀取代碼:

  1. import cvs
  2. cvs_file = open('test.cvs','r')
  3. file = cvs.reader(cvs_file) # 獲得一個(gè)List,,每一個(gè)元素為一行
  4. for line in file:
  5. print(line)

CVS寫(xiě)入代碼:

  1. out = open('test.csv','a', newline='') # newline =''是為了避免出現(xiàn)空行問(wèn)題
  2. csv_write = csv.writer(out,dialect='excel') # 指定文件類(lèi)型為excel類(lèi)型
  3. csv_write.writerow('寫(xiě)入內(nèi)容')

四、 mat文件的讀寫(xiě)

  1. import scipy.io
  2. data = scipy.io.loadmat('matData.mat') # 讀取mat文件
  3. print(data.keys()) # 查看mat文件中的所有變量,,因?yàn)橥粋€(gè)mat文件中可能有多個(gè)變量的內(nèi)容
  4. print(data['matrix1'])
  5. print(data['matrix2'])
  6. matrix1 = data['matrix1']
  7. matrix2 = data['matrix2']
  8. print(matrix1)
  9. print(matrix2)
  10. scipy.io.savemat('matData2.mat',{'matrix1':matrix1, 'matrix2':matrix2}) # 寫(xiě)入mat文件
  11. # matData2.mat為生成的文件名,,{ }內(nèi)的內(nèi)容為鍵值對(duì)——變量名:變量

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多