版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python数据分析与科学计算第6章文件6.1文件的概述6.2文件的打开与关闭6.3文件的读写6.4文件的定位6.5与文件相关的模块6.6文件应用举例6.1文件的概述
“文件”是指存放在外部存储介质(可以是磁盘、光盘、磁带等)上一组相关信息的集合。(1)根据文件依附的介质普通文件:指驻留在磁盘或其他外部介质上的一个有序数据集设备文件:指与主机相连的各种外部设备,将外部文件当作文件来处理1.文件分类1.文件(2)根据文件的组织形式顺序读写文件,是指按从头到尾的顺序读出或写入的文件;随机读写文件,每个记录的长度是相同的,因而通过计算便可直接访问文件中的特定记录,是一种跳跃式直接访问方式。(3)按文件存储数据的形式ASCII文件(或称文本文件)
ASCII码文件中每个字节存放一个ASCII代码,代表一个字符,此种存储形式便于输出显示,在DOS操作系统下可以直接阅读。6.1文件的概述二进制文件
二进制文件中的数据是按照在内存中的二进制存储格式存放的,此种存储形式节省存储单元。二进制文件在DOS操作系统下不能直接阅读。例如:数1124的存储形式为:ASCII码00110001001100010011001000110100'1''1''2''4'占用4个字节十进制码0000010001100100二进制码占用2个字节6.1文件的概述2.文件的操作流程
涉及的操作有:建立文件、打开文件、从文件中读数据或向文件中写数据、关闭文件等。一般的操作步骤为:(1)建立/打开文件。(2)从文件中读数据或者给文件中写数据。(3)关闭文件。6.2文件的打开与关闭1.打开文件常用的调用形式:
文件对象=open(
文件名[,打开方式][,缓冲区])
open()函数>>>x=open('c:\\text\\somefile.txt',’r’,buffering=1024)假设有一个名为somefile.txt的文本文件,存放在c:\text下,打开文件方法:打开方式含
义rt只读打开一个文本文件,只允许读数据wt只写打开或建立一个文本文件,只允许写数据at追加打开一个文本文件,并在文件末尾写数据rb只读打开一个二进制文件,只允许读数据wb只写打开或建立一个二进制文件,只允许写数据ab追加打开一个二进制文件,并在文件末尾写数据rt+读写打开一个文本文件,允许读和写wt+读写打开或建立一个文本文件,允许读和写at+读写打开一个文本文件,允许读,或在文件末尾追加数据rb+读写打开一个二进制文件,允许读和写wb+读写打开或建立一个二进制文件,允许读和写ab+读写打开一个二进制文件,允许读,或在文件末尾追加数据文件的打开方式:6.2文件的打开与关闭文件对象属性文件对象属性含义name返回文件的名称mode返回文件的打开方式closed如果文件被关闭返回True,否则返回False文件属性的引用方法为:
文件对象名.属性名>>>fp=open("e:\\qq.txt","r")>>>'e:\\qq.txt'>>>fp.mode'r'>>>fp.closedFalse
6.2文件的打开与关闭文件对象方法文件对象方法含义close()关闭文件,并将属性closed设置为Trueread(count)从文件对象中读取至多count个字节,如果没有指定count,则读取从当前文件指针直至文件末尾readline(count)从文件中读取一行内容readlines(sizehint)读取文件的所有行(直到结束符EOF),也就是整个文件的内容,把文件每一行作为列表的成员,并返回这个列表write(string)将字符串string写入到文件writelines(seq)将字符串序列seq写入到文件,seq是一个返回字符串的可迭代对象seek(offset,whence)把文件指针移动到相对于whence的offset位置,whence为0表示文件开始处,为1表示当前位置,为2表示文件末尾next()返回文件的下一行,并将文件操作标记移到下一行tell()返回当前文件指针位置(相对文件起始处)flush()清空文件对象,并将缓存中的内容写入磁盘(如果有)6.2文件的打开与关闭6.3文件的读写1.文本文件的读写文本文件的读取(1)read()方法
文件对象.read()例如:有文件e:\file1.txt,采用read()方法读。fp=open("e:\\file1.txt","r")string1=fp.read()(2)readline()方法文件对象.readline()
读取从当前位置到行末的所有字符,包括行结束符,即每次读取一行,当前位置移到下一行。如果当前处于文件末尾,则返回空串。>>>fp=open("e:\\file1.txt","r")>>>string3=fp.readline()>>>print("ReadLine:%s"%(string3))ReadLine:Therewerebearseverywhere.
(3)readlines()方法
文件对象.readlines()
读取从当前位置到文件末尾的所有行,并将这些行保存在一个列表(list)变量中,每行作为一个元素。如果当前文件处于文件末尾,则返回空列表。>>>fp=open("e:\\file1.txt","r")>>>string4=fp.readlines()>>>print("ReadLine:%s"%(string4))ReadLine:['Therewerebearseverywhere.\n','TheyweregoingtoSwitzerland.']>>>string5=fp.readlines()#再次读取文件,返回空列表>>>print("ReadLine:%s"%(string5))ReadLine:[]6.3文件的读写>>>fp.open("e:\\file1.txt","w")>>>fp.writelines(["Python","Pythonprogramming"])6.3文件的读写文本文件的写入(1)write()方法文件对象.write(字符串)在文件当前位置写入字符串,并返回写入的字符个数。例如:>>>fp.open("e:\\file1.txt","w")>>>fp.write("Python")66>>>fp.write("Pythonprogramming")18>>>fp.close()(2)writelines()方法文件对象.writelines(字符串元素的列表)在文件的当前位置处依次写入列表中的所有元素。例如:【例6.1】把一个包含两列内容的文件input.txt,分割成两个文件col1.txt,col2.txt,每个文件一列内容。6.3文件的读写6.3文件的读写程序代码:defsplit_file(filename):#把文件分成两列
col1=[]col2=[]fd=open(filename)#打开文件
text=fd.read()#读入文件的内容。
lines=text.splitlines()#把读入的内容分行
forlineinlines:part=line.split(None,1)col1.append(part[0])col2.append(part[1])returncol1,col2defwrite_list(filename,alist):#把文字列表内容写入文件
fd=open(filename,'w')forlineinalist:fd.write(line+'\n')filename='input.txt'col1,col2=split_file(filename)write_list('col1.txt',col1)write_list('col2.txt',col2)运行结果:(a)col.txt文件内容(b)col2.txt文件内容2.二进制文件的读写二进制文件写入(1)pack()方法pack(格式串,数据对象表)将数字转换为二进制的字符串。6.3文件的读写>>>importstruct>>>x=100>>>y=struct.pack('i',x)#将x转换成二进制字符串>>>y#输出转换后的字符串yb'd\x00\x00\x00'>>>len(y)#计算y的长度4此时,Y是一个4字节的字符串。将y写入文件:>>>fp=open("e:\\file2.txt","wb")>>>fp.write(y)4>>>fp.close()pack()方法使用如下:【例6.2】将一个整数、一个浮点数和一个布尔型对象存入一个二进制文件中。分析:整数、浮点数和布尔型对象都不能直接写入二进制文件,需要使用pack()方法将它们转换成字符串再写入二进制文件中。6.3文件的读写程序代码:importstructi=12345f=2017.2017b=Falsestring=struct.pack('if?',i,f,b)#将整数i、浮点数f和布尔对象b依次转换为字符串fp=open("e:\\string1.txt","wb")#打开文件fp.write(string)#将字符串string写入文件fp.close()#关闭文件运行结果:运行时在e盘下创建“string1.txt”文件,运行结束后,打开“string.txt”文件其内容如图所示。(2)dump()方法
dump(数据,文件对象)将数据对象转换成字符串,然后再保存到文件中。6.3文件的读写>>>importpickle>>>x=100>>>fp=open("e:\\file3.txt","wb")>>>pickle.dump(x,fp)>>>fp.close()【例6.3】将一个整数、一个浮点数和一个布尔型对象存入一个二进制文件中。(使用dump方法)6.3文件的读写程序代码:importpicklei=12345f=2017.2017b=Falsefp=open("e:\\string2.txt","wb")pickle.dump(i,fp)pickle.dump(f,fp)pickle.dump(b,fp)fp.close()6.3文件的读写二进制文件读取>>>importstruct>>>fp=open("e:\\file2.txt","rb")>>>y=fp.read()>>>x=struct.unpack('i',y)>>>x(100,)(1)unpack()方法
unpack(格式串,字符串表)将“字符串表”转换成“格式串”指定的数据类型,该方法返回一个元组。【例6.4】读取例6.2写入的“string1.txt”文件内容。6.3文件的读写程序代码:importstructfp=open("e:\\string1.txt","rb")string=fp.read()a_tuple=struct.unpack('if?',string)print("a_tuple=",a_tuple)i=a_tuple[0]f=a_tuple[1]b=a_tuple[2]print("i=%d,f=%f"%(i,f))print("b=",b)fp.close()运行结果:a_tuple=(12345,2017.20166015625,False)i=12345,f=2017.201660b=False>>>importpickle>>>fp=open("e:\\file3.txt","rb")>>>x=pickle.load(fp)>>>fp.close()>>>x1006.3文件的读写(2)load()方法load(文件对象)从二进制文件中读取字符串,并将字符串转换为Python的数据对象,该方法返回还原后的字符串。例如:【例6.5】读取例6.3写入的“string2.txt”文件内容。6.3文件的读写程序代码:importpicklefp=open("e:\\string2.txt","rb")whileTrue:n=pickle.load(fp)if(fp):print(n)else:breakfp.close()运行结果:123452017.2017True6.4文件的定位>>>fp=open("e:\\file1.txt","r")>>>fp.tell()0>>>fp.read(10)>>>fp.tell()10tell()方法
文件对象.tell()功能:获取文件的当前指针位置seek()方法
文件对象.seek(offset,whence)功能:把文件指针移动到相对于whence的offset位置>>>fp=open("e:\\file1.txt","rb")#以二进制方式打开文件>>>fp.read()#读取整个文件内容,文件指针移动到文件末尾b'PythonPythonprogramming'>>>fp.read()#再次读取文件内容,返回空串b''>>>fp.seek(0,0)#以文件开始作为基准点,向文件末尾方向移动0个字节0>>>fp.read()#文件指针移动之后再次读取b'PythonPythonprogramming'>>>fp.seek(6,0)#以文件开始作为基准点,向文件末尾方向移动6个字节6【例6.6】编写程序,获取文件指针位置及文件长度。6.4文件的定位程序代码:filename=input("请输入文件名:")fp=open(filename,"r") #以只读方式打开文件curpos=fp.tell()#获取文件当前指针位置print("thebeginof%sis%d"%(filename,curpos))fp.seek(0,2)#以文件末尾作为基准点,向文件头方向移动0字节,即文件指针移动到文件尾部length=fp.tell()print("theendbeginof%sis%d"%(filename,length))6.5与文件相关的模块1.os模块函数名函数功能getcwd()显示当前的工作目录chdir(newdir)改变当前工作目录listdir(path)列出指定目录下所有的文件和目录mkdir(path)创建单级目录makedirs(path)递归地创建多级目录rmdir(path)删除单级目录removedirs(path)递归地删除多级空目录rename(old,new)将文件或目录old重命名为newremove(path)删除文件stat(file)获取文件file的所有属性chmod(file)修改文件权限system(command)执行操作系统命令exec()或execvp()启动新进程osspawnv()在后台执行程序exit()终止当前进程2.os.path模块
函数名
函数功能split(path)分离文件名与路径splitext(path)分离文件名与扩展名,返回(f_path,f_name)元组abspath(path)获得文件的绝对路径dirname(path)去掉文件名,只返回目录路径getsize(file)获得指定文件的大小,返回值以字节为单位getatime(file)返回指定文件最近的访问时间getctime(file)返回指定文件的创建时间getmtime(file)返回指定文件最新的修改时间basename(path)去掉目录路径,只返回路径中的文件名exists(path)判断文件或者目录是否存在islink(path)判断指定路径是否绝对路径isfile(path)判断指定路径是否存在且是一个文件isdir(path)判断指定路径是否存在且是一个目录isabs(path)判断指定路径是否存在walk(path)搜索目录下的所有文件6.5与文件相关的模块6.6文件应用举例【例6.7】有两个磁盘文件string1.txt和string2.txt,各存放一行字母,读取这两个文件中的信息并合并,然后再写到一个新的磁盘文件string.txt中。程序代码:fp=open("e:\\string1.txt","rt")print("读取到文件string1的内容为:")string1=fp.read()print(string1)fp.close()fp=open("e:\\string2.txt","rt");print("读取到文件string1的内容为:")string2=fp.read()print(string2)fp.close()string=string1+string2print("合并后字符串内容为:\n",string)fp=open("e:\\string.txt","wt");fp.write(string)#将字符串string的内容写到fp所指的文件中print("已将该内容写入文件string.txt中!");fp.close()6.6文件应用举例【例9.8】输入文件名,生成文件,生成随机数写入该文件,再读取文件内容。程序代码:importrandomfilename=input("请输入文件名:")line=""fp=open(filename,"w")#以写方式打开文件foriinrange(100):line+='编号:'+str(random.random())+'\n'fp.write(line)#将字符串line写入文件fp.close()fp=open
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论