python基础 您所在的位置:网站首页 writexlsx函数 python基础

python基础

2023-03-20 15:12| 来源: 网络整理| 查看: 265

文章目录 一、python 内置方法读取文件(read()、readline()、readlines())写入文件(write()、writelines()) 二、python模块(内置模块csv、外部模块openpyxl)csv模块写入与读取模块openpyxl写入与读取 三、使用pandas库写入文件(.csv、.excel、.txt等)读取文件(.csv、.excel、.txt等) 三、使用numpy库写入文件(savetxt()、save()、savez())读取文件(loadtxt()、load()、fromfile())

一、python 内置方法 读取文件(read()、readline()、readlines()) 方法描述read()一次性读取整个文件内容。readline()每次读取一行内容。内存不够时使用,一般不太用readlines()一次性读取整个文件内容,并按行返回到list,方便我们遍历 read()

scores.txt 罗恩 23 35 44 哈利 60 77 68 88 90 赫敏 97 99 89 91 95 90 马尔福 100 85 90

file1 = open('F:\\python_test\\scores.txt','r',encoding='utf-8') # \在Python中是转义字符,所以时常会有冲突。为了避坑,Windows的绝对路径通常要稍作处理,写成以下两种格式; 'F:\\python_test\\scores.txt' 或者 r'F:\python_test\scores.txt' file_read = file1.read() file1.close() print(file_read)

运行结果

罗恩 23 35 44 哈利 60 77 68 88 90 赫敏 97 99 89 91 95 99 马尔福 100 85 90 readlines()

readlines() 会从txt文件取得一个列表,列表中的每个字符串就是scores.txt中的每一行。而且每个字符串后面还有换行的\n符号。

file1 = open('F:\\python_test\\scores.txt','r',encoding='utf-8') file_lines = file1.readlines() file1.close() print(file_lines)

运行结果

['罗恩 23 35 44\n', '哈利 60 77 68 88 90\n', '赫敏 97 99 89 91 95 99\n', '马尔福 100 85 90'] 写入文件(write()、writelines()) 方法描述write()参数必须是字符串类型writelines()参数可以是list(序列)类型 write()

如果打开文件模式中包含 w(写入),那么向文件中写入内容时,会先清空原文件中的内容,然后再写入新的内容。

file1 = open('F:\\python_test\\abc.txt','w',encoding='utf-8') file1.write('张无忌\n') file1.write('宋青书\n') file1.close()

因此运行上面程序,再次打开 abc.txt 文件,只会看到新写入的内容:

在这里插入图片描述

追加写入文件

如果你只想增加东西,而不想完全覆盖掉原文件的话,就要使用’a’模式,表示append。新写入的内容会添加到原内容后边。

file1 = open('F:\\python_test\\abc.txt','a',encoding='utf-8') file1.write('张无忌\n') file1.write('宋青书\n') file1.close()

运行程序,打开abc.txt文件,可以看到以下的内容 在这里插入图片描述

writelines() file1 = open('F:\\python_test\\scores.txt','r',encoding='utf-8') file2=open('F:\\python_test\\scores_writelines.txt','w+',encoding='utf-8') file2.writelines(file1.readlines()) file1.close() file2.close()

运行程序,打开scores_writelines.txt文件,可以看到以下的内容

在这里插入图片描述 注意: 使用 writelines() 函数向文件中写入多行数据时,不会自动给各行添加换行符。上面例子中,之所以 scores_writelines.txt 文件中会逐行显示数据,是因为 readlines() 函数在读取各行数据时,读入了行尾的换行符。

二、python模块(内置模块csv、外部模块openpyxl) csv模块写入与读取 csv 写入文件步骤

1、创建文件:调用 open() 函数 2、创建对象:借助 writer() 函数 3、写入内容:调用 writer 对象的 writerow() 方法 4、关闭文件:close()

import csv #导入csv模块 csv_file = open('F:\\python_test\\demo.csv','w',newline='',encoding='utf-8') # 调用open()函数打开csv文件,传入参数:文件名“demo.csv”、写入模式“w”、newline=''、encoding='utf-8'。 writer = csv.writer(csv_file) # 用csv.writer()函数创建一个writer对象。 writer.writerow('\ufeff')#解决使用excel打开时中文字符出现乱码情况 writer.writerow(['电影','豆瓣评分']) # 调用writer对象的writerow()方法,可以在csv文件里写入一行文字 “电影”和“豆瓣评分”。 writer.writerow(['银河护卫队','8.0']) writer.writerow(['复仇者联盟','8.1']) csv_file.close() # 写入完成后,关闭文件 csv 读取文件步骤

1、打开文件:调用open()函数 2、创建对象:借助reader()函数 3、读取内容:遍历reader对象 4、打印内容:print()

import csv csv_file=open('F:\\python_test\\demo.csv','r',newline='',encoding='utf-8') #用open()打开“demo.csv”文件,'r'是read读取模式,newline=''是避免出现两倍行距。encoding='utf-8'能避免编码问题导致的报错或乱码 reader=csv.reader(csv_file) #用csv.reader()函数创建一个reader对象 for row in reader: #用for循环遍历reader对象的每一行。打印row,就能读取出“demo.csv”文件里的内容 print(row) csv_file.close()

运行结果 在这里插入图片描述

模块openpyxl写入与读取 Excel文件写入步骤

1、创建工作薄:利用openpyxl.Workbook{}创建workbook对象 2、 获取工作表:借助workbook对象的active属性 3、操作单元格:单元格:sheet[‘A1’];一行:append() 4、保存工作薄:save{}

import openpyxl # 导入openpyxl wb=openpyxl.Workbook() # 利用openpyxl.Workbook()函数创建新的workbook(工作簿)对象,就是创建新的空的Excel文件。 sheet=wb.active # wb.active就是获取这个工作簿的活动表,通常就是第一个工作表。 sheet.title='册页一与一' # 可以用.title给工作表重命名。现在第一个工作表的名称就会由原来默认的“sheet1”改为"new title"。 sheet['A1'] = '吴青峰' # 把'漫威宇宙'赋值给第一个工作表的A1单元格,就是往A1的单元格中写入了'漫威宇宙'。 rows = [['费洛蒙小姐','我会我会','最难的是相遇','低低星垂'],['宁静海','困在','迷幻','极光']] # 先把要写入的多行内容写成列表,再放进大列表里,赋值给rows。 for i in rows: # 遍历rows,同时把遍历的内容添加到表格里,这样就实现了多行写入。 sheet.append(i) print(rows) wb.save('F:\\python_test\\song.xlsx') # 保存新建的Excel文件,并命名为“song.xlsx”

运行程序,查看song.xlsx文件

在这里插入图片描述

Excel文件读取步骤

1、打开工作薄:利用openpyxl.Workbook{}创建workbook对象 2、获取工作表:借助workbook对象的active属性 3、读取单元格:单元格:sheet[‘A1’];一行:append() 4、打印单元格:save{}

wb = openpyxl.load_workbook('F:\\python_test\\song.xlsx') #调用openpyxl.load_workbook()函数,打开“song.xlsx”文件。 sheet = wb['册页一与一']#获取“song.xlsx”工作簿中名为“册页一与一”的工作表。 sheetname = wb.sheetnames#sheetnames是用来获取工作簿所有工作表的名字的。 print(sheetname) #如果你不知道工作簿到底有几个工作表,就可以把工作表的名字都打印出来。 A1_cell = sheet['A1'] #把“册页一与一”工作表中A1单元格赋值给A1_cell,再利用单元格value属性,就能打印出A1单元格的值。 A1_value = A1_cell.value print(A1_value)

运行结果 在这里插入图片描述

三、使用pandas库 写入文件(.csv、.excel、.txt等)

使用pandas写入文件方法如下 :

方法描述返回数据to_csv()写入 .csv 格式 或者 .txt格式 文件输出dataframe格式to_excel()写入excel文件(包括xlsx,xls,xlsm格式)输出dataframe格式 写入 .csv 文件:to_csv()

import pandas as pd pd.to_csv() 是DataFrame类的方法

基本参数

DataFrame.to_csv(path_or_buf=None, sep=‘,’, na_rep=‘’, float_format=None, columns=None, header=True, index=True, index_label=None, mode=‘w’, encoding=None, compression=‘infer’, quoting=None, quotechar=‘"’, line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal=‘.’, errors=‘strict’)

参数名称功能以及含义path_or_buf文件输出路径sep分隔符,默认为’,’na_rep缺失数据填充,默认是空字符串float_format字符串格式,小数点保留几位columns要输出到csv的列名header是否保留列名,默认是保留列名,可传入一个列名列表listindex写行名称(索引),默认写入encoding编码格式,表示在输出文件中使用的编码的字符串,Python2默认为“ASCII”,Python3默认为“UTF-8”。 path_or_buf 路径 #任意的多组列表 a = [1,2,3] b = [4,5,6] #字典中的key值即为csv中列名 dataframe = pd.DataFrame({'a_name':a,'b_name':b}) #将DataFrame存储为csv,index表示是否显示行名 dataframe.to_csv("F:\\python_test\\test.csv",index=False,sep=',')

运行结果 在这里插入图片描述

import pandas as pd data_read_path='F:\\python_test\\demo.csv' data_write_path='F:\\python_test\\demo_save.csv' #指明保存文件路径 data=pd.read_csv(data_read_path) data.to_csv(data_write_path,index=False,encoding='utf=8-sig')

运行结果 在这里插入图片描述

sep 分隔符 data.to_csv(data_write_path,sep=',') np_rep data.to_csv(data_write_path,sep=',',na_rep="NULL",encoding='utf=8-sig') #空值保存为NULL,如果不写,默认是空

运行结果

在这里插入图片描述

float_format data.to_csv(data_write_path,float_format='%.2f',encoding='utf=8-sig') #保留两位小数

运行结果 在这里插入图片描述

columns data.to_csv(data_write_path,columns=['电影'],encoding='utf=8-sig') #只保留名为“电影”这一列

运行结果 在这里插入图片描述

header data.to_csv(data_write_path,header=0,encoding='utf=8-sig') #不保存列名

运行结果

在这里插入图片描述

index data.to_csv(data_write_path,index=0,encoding='utf=8-sig') #不保存行索引

运行结果 在这里插入图片描述

写入 .txt 文件:to_csv()

import pandas as pd pd.to_csv() 记得一定设置分割方式:sep

import pandas as pd data_read_path='F:\\python_test\\demo.csv' data=pd.read_csv(data_read_path) data.to_csv('F:\\python_test\\demo_save.txt', sep='\t', index=False)

运行结果 在这里插入图片描述

写入 .excel 文件:to_excel()

import pandas as pd pd.to_excel()

基本参数

DataFrame.to_excel(excel_writer, sheet_name=‘Sheet1’, na_rep=‘’, float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep=‘inf’, verbose=True, freeze_panes=None)

参数名称功能以及含义excel_writer文件路径或现有的ExcelWritersheet_name它是指包含DataFrame的工作表的名称。

其他参数意义和to_csv()相似,可以参考前面to_csv()例子。

单个sheet写入 import pandas as pd df1 = pd.DataFrame({'One': [1, 2, 3]}) df1.to_excel('F:\\python_test\\excel1.xlsx', sheet_name='test1', index=False) # index false为不写入索引

运行结果 在这里插入图片描述

读取文件(.csv、.excel、.txt等)

使用pandas读取文件方法如下 :

方法描述返回数据read_csv()读取csv格式文件输出dataframe格式read_excel()读取excel文件(包括xlsx,xls,xlsm格式)输出dataframe格式read_table()读取txt文件,通过sep参数(分隔符)的控制来对任何文本文件读取read_json()读取json格式文件read_html()读取html表格read_clipboard()读取剪切板内容read_pickle()读取pickled持久化文件read_sql()读取数据库数据,连接好数据库后,传入sql语句即可。read_dhf()读取hdf5文件,适合大文件读取。read_parquet()读取parquet文件read_sas()读取sas文件read_stata()读取stata文件read_gdp()读取google_blgquery数据 读取 .csv 文件:read_csv()

pandas.read_csv(filepath_or_buffer, sep=, delimiter=None, header=‘infer’, names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression=‘infer’, thousands=None, decimal=’.’, lineterminator=None, quotechar=’"’, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options=None)

基本参数 参数名称功能以及含义filepath_or_buffer可以是文件路径、可以是URL,也可以是实现read方法的任意对象。sep字符串,表示分隔符,默认为’,’ .。delimiter分隔符的另一个名字,与sep功能相似,默认None。delim_whitespace默认为False,设置为True时,表示分隔符这空白字符,可以是空格,‘\t’等等。不管分隔符是什么,只要是空白字符,那么可以通过delim_whitespace=True进行读取。header设置导入DataFrame的列名称,默认为”infer“,注意它与下面介绍的names参数的微妙关系。names当names没被赋值时,header=0,即选取数据文件的第一行作为列名;当names被赋值,header没被赋值时,header=None。如果都赋值,就会实现两个参数的组合功能。index_col读取文件之后得到的DataFrame的索引默认是0,1,2…,我们可以通过set_index设定索引,但是也可以在读取的时候就指定某列为索引。usecols如果一个数据集中含有很多列,但是我们在读取的进修只想要使用到的列,就可以使用这个参数。mangle_dupe_cols在实际工作中,我们得到的数据会很复杂,有时导入的数据会含有名字相同的列。参数 mangle_dupe_cols 会将重名的列后面多一个 .1,该参数默认为 True,如果设置为 False,会抛出不支持的异常。prefix当导入的数据没有header时,设置此参数会自动加一个前缀。 filepath_or_buffer import pandas as pd data_path='F:\\python_test\\demo.csv' data=pd.read_csv(data_path) print(data)

运行结果 在这里插入图片描述

sep

从图中,得知 demo.csv 的分隔符为 ‘,’ 在这里插入图片描述

注意:“csv文件的分隔符” 和 “我们读取csv文件时指定的分隔符” 一定要一致。 不一致,因此多个列之间没有分开,而是连在一起了,如下图所示。 所以,我们需要将分隔符设置成 ‘,’ 才可以。

pd.read_csv(data_path,sep='\t')

运行结果 在这里插入图片描述

pd.read_csv(data_path,sep=',')

运行结果 在这里插入图片描述

delim_whitespace :不管分隔符是什么,只要是空白字符,那么可以通过delim_whitespace=True进行读取。 pd.read_csv(data_path,delim_whitespace=True)

运行结果 在这里插入图片描述

header、names

1、 csv文件有表头并且是第一行,那么names和header都无需指定; 2、csv文件有表头、但表头不是第一行,可能从下面几行开始才是真正的表头和数据,这个时候指定header即可; 3、csv文件没有表头,全部是纯数据,那么我们可以通过names手动生成表头; 4、csv文件有表头、但是这个表头你不想用,这个时候同时指定names和header。先用header选出表头和数据,然后再用names将表头替换掉,就等价于将数据读取进来之后再对列名进行rename;

1)names 没有被赋值,header 也没赋值:

#header=0,即选取文件的第一行作为表头 pd.read_csv(data_path,sep=',')

运行结果 在这里插入图片描述

2)names 没有被赋值,header 被赋值:

#不指定names,指定header为1,则选取第二行当做表头,第二行下面为数据。 pd.read_csv(data_path,sep=',',header=1)

运行结果 在这里插入图片描述

3)names 被赋值,header 没有被赋值:

pd.read_csv(data_path,sep=',',names=['id','movies','grades','date'])

运行结果 在这里插入图片描述

4)names 和 header 都被赋值:

#相当于先不看names,只看header,header为0代表先把第一行当做表头,下面的当成数据;然后再把表头用names给替换掉。 pd.read_csv(data_path,sep=',',names=['id','movies','grades','date'],header=0)

运行结果

在这里插入图片描述

index_col:我们在读取文件之后所得到的DataFrame的索引默认是0、1、2……,我们可以通过set_index设定索引,但是也可以在读取的时候就指定某列为索引。 pd.read_csv(data_path,sep=',',index_col="电影")

运行结果 在这里插入图片描述

usecols:如果一个数据集中有很多列,但是我们在读取的时候只想要使用到的列,我们就可以使用这个参数。 pd.read_csv(data_path,sep=',',usecols=["电影"])

运行结果 在这里插入图片描述

prefix :当导入的数据没有 header 时,设置此参数会自动加一个前缀。 pd.read_csv(data_path,sep=',', header=None, prefix="hello")

运行结果 在这里插入图片描述

通用解析参数 参数名称功能以及含义dtype在读取数据的时候,设定字段的类型。enginepandas解析数据时用的引擎,目前解析引擎有两种:c、python。默认为 c,因为 c 引擎解析速度更快,但是特性没有 python 引擎全。如果使用 c 引擎没有的特性时,会自动退化为 python 引擎。converters读取数据的时候对列数据进行变换。skiprows表示过滤行,想过滤哪些行,就写在一个列表里面传递给skiprows即可。skipfooter从文件末尾未过滤行。nrows设置一次性读入的文件行数。comment指定注释符,在读取数据时,如果碰到行首指定的注释符,则跳过该行。 dtype:

例如,编号为“0002”,如果默认读取的时候,会显示为2,所以这个时候要把他转为字符串类型,才能正常显示为0002:

pd.read_csv(data_path,sep=',')

运行结果 在这里插入图片描述

pd.read_csv(data_path,sep=',',dtype={"编号": str})

运行结果 在这里插入图片描述

converters:

例如将编号增加10,在使用converters参数时,解析器默认所有列的类型为str,所以需要进行类型转换。

pd.read_csv(data_path,sep=',',converters={"编号": lambda x: int(x) + 10})

运行结果在这里插入图片描述

skiprows:

这里把第一行过滤掉了,因为第一行是表头,所以在过滤掉之后第二行就变成表头了。 注意的是:这里是先过滤,然后再确定表头。

pd.read_csv(data_path, sep=",", skiprows=[0])

运行结果 在这里插入图片描述

当然里面除了传入具体的数值,来表明要过滤掉哪些行,还可以传入一个函数。 由于索引从0开始,所以凡是索引大于0、并且%2等于0的记录都过滤掉。索引大于0,是为了保证表头不被过滤掉。

pd.read_csv(data_path, sep=",", skiprows=lambda x:x>0 and x%2 == 0)

运行结果 在这里插入图片描述

skipfooter:从文件末尾过滤行,解析引擎退化为 Python。这是因为 C 解析引擎没有这个特性。 pd.read_csv(data_path, sep=",", skipfooter=3, encoding="utf-8", engine="python")

运行结果 在这里插入图片描述

nrows:设置一次性读入的文件行数。 pd.read_csv(data_path, sep=",", nrows=1)

运行结果 在这里插入图片描述

空值处理相关参数 参数名称功能以及含义na_values该参数可以配置哪些值需要处理成NaN na_values pd.read_csv(data_path, sep=",", na_values={"电影": ["银河护卫队", "复仇者联盟"]})

运行结果 在这里插入图片描述

时间处理相关参数 参数名称功能以及含义parse_dates指定某些列为时间类型,这个参数一般搭配date_parse使用。date_parser用来配合parse_dates参数的,因为有的列虽然是日期,但没办法直接转化,需要我们指定一个解析格式。infer_datetime_format参数默认为 False。如果设定为 True 并且 parse_dates 可用,那么 pandas 将尝试转换为日期类型,如果可以转换,转换方法并解析,在某些情况下会快 5~10 倍。 from datetime import datetime data_1=pd.read_csv(data_path,sep=',') data_2=pd.read_csv(data_path, sep=",", parse_dates=["日期"], date_parser=lambda x: datetime.strptime(x, "%Y-%m-%d")) print(data_1.dtypes)

运行结果 在这里插入图片描述

print(data_2.dtypes)

运行结果 在这里插入图片描述

读取 .excel 文件:read_excel()

pandas.read_excel(io,sheet_name=0, header=0,names=None,index_col=None,usecols=None,squeeze=False,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrows=None,na_values=None,keep_default_na=True,verbose=False,parse_dates=False,date_parser=None,thousands=None,comment=None,skipfooter=0,convert_float=True,mangle_dupe_cols=True,**kwds)

io:支持str,bytes,ExcelFile, xlrd.Book, path object, or file-like object。

默认读取第一个sheet的全部数据

import pandas as pd excel_path='F:\\python_test\\song.xlsx' pd.read_excel(excel_path)

运行结果 在这里插入图片描述

sheet_name():参数支持str,int,list,None,default()格式

str字符串用于引用的sheet的名称

pd.read_excel(excel_path,sheet_name=“无与伦比的美丽”)

运行结果 在这里插入图片描述

int整数用于引用的sheet的索引(从0开始)

pd.read_excel(excel_path,sheet_name=2,names=["song"],header=None)

运行结果 在这里插入图片描述

字符串或整数组成的列表用于引用特定的sheet 读取后的数据类型是OrderedDict,将两个sheet的数据合并到了一个list中

pd.read_excel(excel_path,sheet_name=[2,"无与伦比的美丽"],names=["song"],header=None)

运行结果 在这里插入图片描述

None 表示引用所有sheet

pd.read_excel(excel_path,sheet_name=None)

运行结果 在这里插入图片描述

其他参数与read_csv()相似,可以参考前面讲解结合使用。

读取 .txt 文件:read_table()

pandas.read_table(filepath_or_buffer, *, sep=_NoDefault.no_default, delimiter=None, header=‘infer’, names=_NoDefault.no_default, index_col=None, usecols=None, squeeze=None, prefix=_NoDefault.no_default, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression=‘infer’, thousands=None, decimal=‘.’, lineterminator=None, quotechar=‘"’, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, encoding_errors=‘strict’, dialect=None, error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options=None)

有一个test.txt文件,内容如下:

在这里插入图片描述

import pandas as pd #用read_table函数读取文本文件的数据 data=pd.read_table('F:\\python_test\\test.txt', #文件路径,前面的filepath_or_buffer符可以省略掉 sep=',',#指定数据中变量之间的分隔符,注意这里是中文的逗号 header=None , #不需要将原来的数据中的第一行读作表头 names=['id','name','gender','native place'] , #重新为各列起变量名称 converters={'id':str} ,#将ID转换为字符串,以免开头的00消失 skiprows=2 , #跳过开头的两行数据 skipfooter=2, #跳过末尾的两行数据 comment='!', #不读取“!”开头的数据行 engine='python',#skipfooter:从文件末尾过滤行,解析引擎退化为 Python,C 解析引擎没有这个特性。 encoding='utf-8' #为防止中文乱码 )

运行结果 在这里插入图片描述

三、使用numpy库 写入文件(savetxt()、save()、savez())

Numpy写入文件的3中方法:savetxt()、save()、savez()。

方法描述返回数据savetxt()将1维或者2维数组写入txt文本或csv文件数组save()写Numpy专用的二进制数据,将数组以未压缩二进制格式保存在扩展名为.npy的文件中。会自动处理元素类型和形状等信息。savez()写Numpy专用的二进制格式文件。将多个数组压缩到一个扩展名为npz的文件。其中每个文件都是一个save()保存的npy文件。数据 savetxt()

numpy.savetxt(fname,array,fmt=‘%.18e’,delimiter=None,newline=‘\n’, header=‘’, footer=‘’, comments='# ', encoding=None)**

主要参数 参数名称功能以及含义fname文件、字符串或产生器,可以是.gz或.bz2的压缩文件。array存入文件的数组(一维数组或者二维数组)fmt写入文件的格式,如%d , %.2f , %.18e,默认值是%.18e(浮点数)。delimiter分隔符,通常情况是str可选。header将在文件开关写入的字符串。footer将在文件尾部写入的字符串。comments将附加到header和footer字符串的字符串,以将其标记为注释。默认值:’#’encodiing用于编码输出文件的编码。 写入 .txt 文件 import numpy as np arr=np.arrange(12).reshape(3,4) ## 保存为txt文件,fmt缺省取%.18e(浮点数),分割符默认是空格。 np.savetxt("F:\\python_test\\numpy_test_1.txt",arr)

运行结果 在这里插入图片描述

## fmt:%d 写入文件的元素是十进制整数,分割符为逗号","。 np.savetxt("F:\\python_test\\numpy_test_2.txt",arr,fmt="%d",delimiter=',')

运行结果 在这里插入图片描述

## 在numpy_test_3.txt文件头部和尾部增加注释,头部 #test_3,尾部 # 数据写入注释,写入文件的元素是字符串 np.savetxt("F:\\python_test\\numpy_test_3.txt",arr,fmt="%s",delimiter=',',header=\ 'test_3',footer="测试数据",encoding="utf-8")

运行结果 在这里插入图片描述

## 在numpy_test_4.txt文件头部加 ##test_4 注释 np.savetxt("F:\\python_test\\numpy_test_4.txt",arr,fmt="%f",delimiter=',',header='test_4',footer="测试数据",encoding="utf-8")

运行结果 在这里插入图片描述

写入 .csv 文件 ## 将保存为csv文件 np.savetxt("F:\\python_test\\numpy_test_2.csv",arr,fmt='%d',header='test_2',delimiter=',')

运行结果 在这里插入图片描述

save()

numpy.save(file,array)

savez()

numpy.savez(file,array)

读取文件(loadtxt()、load()、fromfile())

Numpy读取文件的3中方法:loadtxt()、load()、fromfile()。

方法描述返回数据loadtxt()读取txt文本、csv文件以及.gz 或.bz2格式压缩文件,前提是文件数据每一行必须要有数量相同的值。数组load()读取Numpy专用的二进制数据,读取从npy、npz、pickle文件加载数组或pickled对象数组、元组、字典等fromfile()简单的文本、二进制数数据 laodtxt()

numpy.loadtxt(fname,dtype=type’float’>,comments=’#’,delimiter=None, converters=None,skiprows=0,usecols=None,unpack=False,ndmin=0,encoding=‘bytes’)

基本参数 方法fname文件的相对地址或者绝对地址(被读取的文件名)dtype指定读取后的数据的数据类型,默认设置为floatcomments跳过文件中指定参数开关的行(即不读取)delimiter指定读取文件中数据的分割符converters对读取的数据进行预处理skiprows选择跳过的行数usecols指定需要读取的列unpack选择是否将数据进行向量输出encoding对读取的文件进行预编码 读取 .txt 文件 import numpy as np ## 读取 ”F:\\python_test\\“ 路径下文件numpy_test_1.txt np.loadtxt("F:\\python_test\\numpy_test_1.txt")

运行结果 在这里插入图片描述

## skiprows:指跳过前1行, 如果设置skiprows=2, 就会跳过前两行,数据类型设置为整型。 np.loadtxt("F:\\python_test\\numpy_test_1.txt",skiprows=2,dtype=int)

运行结果 在这里插入图片描述

## comment, 如果行的开头为#就会跳过该行 np.loadtxt("F:\\python_test\\numpy_test_4.txt",skiprows=2,comments="#",delimiter=',') np.loadtxt("F:\\python_test\\numpy_test_4.txt",comments="#",delimiter=',')

运行结果 在这里插入图片描述 在这里插入图片描述

## usecols:指定读取的列,若读取0,2两列 np.loadtxt('F:\\python_test\\numpy_test_3.txt',dtype=int, skiprows=1,delimiter=',',usecols=(0, 2))

运行结果 在这里插入图片描述

## unpack是指会把第一列当成一个列输出 ,而不是合并在一起。 (a,b)=np.loadtxt("F:\\python_test\\numpy_test_2.txt",skiprows=1,dtype=int,delimiter=',',usecols=(0,2),comments="#",unpack=True) print(a,b,sep="\n")

运行结果

在这里插入图片描述

读取 .csv 文件 ## 读取csv文件 np.loadtxt("F:\\python_test\\numpy_test_2.csv",dtype='float32', delimiter=',')

运行结果

在这里插入图片描述

load()

load(file, mmap_model=None, allow_pickle=True, fix_import=True, encoding=‘ASCII’)

方法描述file类文件对象或字符串格式。类文件对象需要支持seek()和read()方法。mmap_mode内存映射模型。值域None。‘r+‘,’r’,‘w+’,‘c’。allow_pickle布尔型。决定是否加载存储在npy文件pickled对象数组,默认为True。fix_imports布尔型。如果为True,pickle尝试将旧的python2名称映射到python3中并使用新的名称。仅在python2生成的pickled文件加载到python3时才有用,默认为True。encoding字符串。决定读取python2字符串时使用何种编码。 读取 .npy 文件 import numpy as np write_data=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) np.save("F:\\python_test\\load_data.npy",write_data) # 保存为npy数据文件,将数据存储为npy保存时可以省略扩展名,默认为.npy。 read_data=np.load('F:\\python_test\\load_data.npy') # 读取npy文件 print(read_data)

运行结果 在这里插入图片描述

读取 .npz 文件 import numpy as np write_data_1=np.arange(12).reshape(3,4) np.savez("F:\\python_test\\load_data_1.npz",write_data) #多数组存储,默认文件名.npz read_data_1=np.load("F:\\python_test\\load_data_1.npz") #读取.npz文件 for i in read_data_1.items(): print(i)

运行结果

在这里插入图片描述

fromfile()

fromfile(file, dtype=float, count=-1, sep=‘’)

方法描述file文件或者字符串。dtype数据类型。注意数据类型与文件存储的类型一致。count整数型。读取数据的数量,-1表示读取所有数据。sep字符串,如果file是一个文本文件,那么该值就是数据间的分隔符。如查为空(“”)则意味着file是一个二进制文件,多个空格的话按照一个空格处理。 读取二进制文件 import numpy as np file_name = "F:\\python_test\\numpy_test_1.txt" data = np.loadtxt(file_name, dtype='float32', delimiter=' ') tofile_name = 'binary' # 定义导出二进制文件名 data.tofile(tofile_name) # 导出二进制文件 fromfile_data = np.fromfile(tofile_name, dtype='float32') # 读取二进制文件 print(fromfile_data)

运行结果 在这里插入图片描述

注意:务必确保读入文件跟存储文件时的数据类型一致,否则导致数据报错。比如上面代码,不指定float32格式,看一下输出结果。tofile()方法保存的数据丢失数据形状信息,因此导入时无法重现原始数据矩阵。

import numpy as np file_name = "F:\\python_test\\numpy_test_1.txt" data = np.loadtxt(file_name, delimiter=' ') tofile_name = 'binary' # 定义导出二进制文件名 data.tofile(tofile_name) # 导出二进制文件 fromfile_data = np.fromfile(tofile_name, dtype='float32') # 读取二进制文件 print(fromfile_data)

运行结果 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有