python中常用的文件读写方法(txt文本文件,excel文件,CVS文件,mat文件)
一、txt类文本文件的读写
使用python处理数据文件较多,而且大部分数据文件保存在文本文件中(例如:‘ .txt ’, ' .json ' 文件)
读取文本文件的主要步骤分为:a)打开目标文件; b)获取文件内数据; c)关闭文件
打开文件的一般方式为:
[code]f=open(file_name,access_mode = 'r',buffering = -1)
其中 filen_ame即为目标文件名,输入为字符串形式;access_mode = 'r' 表示执行功能 。‘r’ 表示读取(read);‘w’ 表示写入(write); 'a'表示增加(add),也是写入的一种,直接在已存在文本数据后面新增数据 ;buffering = -1指定缓存方式,-1表示模型缓存,0表示不缓存,1表示缓存一行,n表示缓存n行(没有特殊性能要求,该参数不做修改,直接默认即可)
由于文本文件内容编码方式千变万化,很多时候直接用open()读写会出现编码错误的问题,例如:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
python代码里稍不注意就会出现这样的错误,特别是在Linux环境下,如果python代码里面出现中文或者异常符号,运行代码时候就会出现这样的错误。此时可以在代码的起始位置增加:# code = 'utf-8' 或者 # coding = UTF-8,最佳的处理方式是引入sys模块。
[code]import sys reload(sys) sys.setdefaultencoding('utf-8') # utf-8可以根据需哟更换成其他编码方式
而基于文本文件读写遇到这样的错误,则推荐用python的另外一个模块codecs.
[code]fw = codecs.open('test1.txt','a','utf-8')
或者使用with来实现代码:
[code]with codecs.open('文件名','a',encoding = 'utf-8') as file:
codecs模块可以指定一个编码打开文件,使用这个方法打开的文件读取返回的将是unicode。写入时,如果参数 是unicode,则使用open()时指定的编码进行编码后写入;如果是str,则先根据源代码文件声明的字符编码,解码成unicode后再进行前述 操作。相对内置的open()来说,这个方法比较不容易在编码上出现问题。
一下是几种常见的文本文件读取数据代码:
[code]## 读取文件数据的三种方法 # 方法一 : read(),直接将整个文本内的数据读取到一个字符串中。读取整个文本时候可以,但是读取多行多列数据的时候不推荐。 with codecs.open('test.txt','r',encoding = 'utf-8') as file: # 打开文件 data = file.read() # 读取数据,data为整个文本文件里面的内容,为字符串形式。 file.close() # 关闭文件 # 方法二 : readline(),一行一行的读取,这种操作在以行为单位的数据读取时候比较方便,适合较大数据文件 with codecs.open('test.txt','r',encoding = 'utf-8') as file: # 打开文件 while True: data_i = file.readline() # 读取第i行的数据,fata_i即为第i行数据,是字符串形式,可以进行数据处理 file.close() # 关闭文件 # 方法三 : readlines(),直接读取整个文本文件数据形成一个list,每一行数据对应list中的一个元素(字符串形式) with codecs.open('test.txt','r',encoding = 'utf-8') as file: # 打开文件 data = file.readlines() # data 为一个list,每个元素是一行的数据 for data_i in data: data_i.rstrip('\n') # data_i为第i行数据是一个字符串,但是结尾后换行符'\n',需要去掉。 file.close() # 关闭文件
文本文件的写入有两种情况,分为一次性写入与逐行写入。
[code]# 写入的方式有两种,一种是一次性写入,一种是逐行写入,在后面增加新内容 # 方法一 : 一次性写入'w' with codecs.open('test.txt','w',encoding = 'utf-8') as file: file.write('数据内容或者变量') file.close() # 方法二 :逐行写入,增加新内容,适用于循环条件下 with codecs.open('test.txt','a',encoding = 'utf-8') as file: for i in range(10): file.write('每次循环的数据') file.close()
Json文件是一种特殊的文本文件,写入方法并不是write,而是json.dump()
[code]with codecs.open('test.json','a',encoding = 'utf-8') as file: # 假设变量为一个list list = [1,2,3,4,5] json.dump(list,file,ensure_ascii = False,indent = 2) # ensure_ascii = False 指定输出为中文,否则输出为编码 # indent = 2 是指定每个字之间的间距
二、 excel文件的读写
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所示,我需要读取表格内部数据信息,但我特意部分信息缺失。列表操作有很多,例如:
a)获取excel文件中所有表格
b)根据表格获取对应表格内的数据信息
c)获取表格的行数,列数
d)整行或者整列的切片处理
e)获取指定位置的数据内容
[code]import xlrd # 打开文件 workbook = xlrd.open_workbook(r'./test.xlsx') # a)获取excel文件中所有表格 sheet = workbook.sheet_names() print(sheet) # 输出为['class_one'],是一个list类型,每一个元素对应一个表名 # b)根据表格索引或者名称获取对应表格内的数据信息 # 根据索表名引号获取表格 data1 = workbook.sheet_by_index(0) # 根据表名获取表格 data2 = workbook.sheet_by_name(sheet[0]) # c)获取表格的行数,列数 # 表格的行数 num_row = data1.nrows print(num_row) # 输出为11,该方式读取将列名一起读入,如果要对数据进行处理,第一行数据需要去除 # 表格的列数 num_col = data2.ncols print(num_col) # 输出为4 # d)整行或者整列的切片处理 data_row = data1.row_values(0) print(data_row) # 输出['ID','Name','age','scors']为一个list类型,每个元素为一个字符串 data_col = data2.col_values(0) print(data_col) # 输出['ID','101','102','103','104','105','106','107','201','206','203'] # e)获取指定位置的数据内容 print(data1.cell(2,1)) # 输出第三行第二列的数据信息 text:'Lucy' print(data2.cell(2,1).value) # 输出第三行第二列的数据内容 Lucy
对excel文件的写入操作:
[code]#!/usr/bin/env python # coding=utf-8 from xlwt import * #需要xlwt库的支持 #import xlwt file = Workbook(encoding = 'utf-8') #指定file以utf-8的格式打开 table = file.add_sheet('data') #指定打开的文件名 data = { 241a4 "1":["张三",150,120,100], "2":["李四",90,99,95], "3":["王五",60,66,68] } #字典数据 ldata = [] num = [a for a in data] #for循环指定取出key值存入num中 num.sort() #字典数据取出后无需,需要先排序 for x in num: #for循环将data字典中的键和值分批的保存在ldata中 t = [int(x)] for a in data[x]: t.append(a) ldata.append(t) for i,p in enumerate(ldata): #将数据写入文件,i是enumerate()函数返回的序号数 for j,q in enumerate(p): # print i,j,q table.write(i,j,q) file.save('data.xlsx')
三、 CVS文件读写
cvs文件也是常用的数据文件形式之一,读取一般有两种,python自带的cvs模块,以及pandas里面的读取工具。在这里介绍一下python自带模块,pandas工具相当强大,后面统一整理。
CVS读取代码:
[code]import cvs cvs_file = open('test.cvs','r') file = cvs.reader(cvs_file) # 获得一个List,每一个元素为一行 for line in file: print(line)
CVS写入代码:
[code]out = open('test.csv','a', newline='') # newline =''是为了避免出现空行问题 csv_write = csv.writer(out,dialect='excel') # 指定文件类型为excel类型 csv_write.writerow('写入内容')
四、 mat文件的读写
[code]import scipy.io data = scipy.io.loadmat('matData.mat') # 读取mat文件 print(data.keys()) # 查看mat文件中的所有变量,因为同一个mat文件中可能有多个变量的内容 print(data['matrix1']) print(data['matrix2']) matrix1 = data['matrix1'] matrix2 = data['matrix2'] print(matrix1) print(matrix2) scipy.io.savemat('matData2.mat',{'matrix1':matrix1, 'matrix2':matrix2}) # 写入mat文件 # matData2.mat为生成的文件名,{ }内的内容为键值对——变量名:变量
阅读更多
- vbs操作txt文本文件常用方法(函数)
- python 读写txt文件 json文件的实现方法
- python 读写txt文件 json文件的实现方法
- Python小练习1:.txt文件常用读写操作
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法
- Python读写txt文本文件
- Python读写txt文本文件的操作方法全解析
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- Python读写Excel文件方法介绍
- Android应用程序中读写txt文本文件的基本方法讲解
- matlab 读写txt文本文件的方法
- vbs操作txt文本文件常用方法(函数)
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法
- Python实现读取txt文件并转换为excel的方法示例
- Python读写txt文本文件的操作方法全解析
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- Python读写txt文本文件的操作方法全解析
- vbs操作txt文本文件常用方法(函数)