版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计及上机实验主讲:杨薇
Pythonpython文件的持久化第11章11.1文件操作相关模块概述11.2字符流和字节流的概念11.3文本文件的读取与写入11.4二进制文件的读写11.5文件对象的常用方法11.6CSV文件的读取和写入11.7对象序列化11.8文件的几个常规操作11.9Python对文件目录的操作11.10案例实战文件的打开与关闭文本文件的读写二进制文件的读写文件的操作目录的操作本章重点文件的操作文件对象的使用方法本章难点文件操作相关模块概述11.1文件是存储在存储媒介上的信息或数据,信息或数据可以是文字、照片、视频、音频等。文件作为数据永久存储的一种形式,通常位于外部存储器中。Python对文件提供了很好的支持,内置了文件对象以及众多的支持库。Python标准库中包括了大量的文件处理相关模块,表11-1列出了相关的模块。文件操作相关模块概述11.1字符流和字节流的概念11.2在现行软件体系中,写入文件的形式主要可以分为字符流和字节流两种。字符流文件又称为文本文件,字节流文件又称为二进制文件。字符流和字节流的概念11.21.字符流字符流指的是将数据内容以字符的形式保存到文件中,在读取过程中,读取到的所有内容都是字符。这是一种非常常见的文件保存形式,又称为文本文件,存储的是常规字符串,由若干文本行组成,每行以换行符“\n”结尾,可以使用文本编辑器进行显示、编辑,并且能够直接阅读,如.py文件,记事本文件等,直接打开这些文件可以看到里面所有内容都是一个个字符。常用的字符流文件格式包括INI、THML、XML、JSON、CSV等。字符流和字节流的概念11.22.字节流字节流是指将数据内容以字节的形式保存到文件中,又称为二进制文件,在读取过程中需要先读取字节,再将字节按照一定的规则转换为可以识别的内容。二进制文件无法直接读取和理解其内容,必须了解其文件结构,使用专门的软件进行解码后才能读取、显示、修改。例如图形图像文件、音视频文件、可执行文件、数据库文件等。在计算机系统中,越是底层,这种方法就越常用,因为以这种形式保存的文件直接就是二进制数据。所以在系统的底层,比如网络数据的发送和接收,都是将数据按照指定格式序列化为字节流再进行发送和接收。文本文件的读取与写入11.311.3.1文本文件的写入文本文件的写入一般包括3个步骤,即打开文件、写入数据和关闭文件。1.创建或打开文件对象Python使用内置open()函数打开一个文件,并返回一个可迭代的文件对象,通过该文件对象可以对文件进行读写操作。如果文件不存在、访问权限不够、磁盘空间不足或其他原因导致创建文件对象失败,open()函数会抛出一个IOError的异常,并且给出错误码和详细的信息。
open()函数的语法结构如下:
fileobject=open(filename[,mode='r'][,buffering=-1][,encoding])参数的含义如下:filename:要打开的文件名称。mode:指定打开文件后的处理方式。文本文件的读取与写入11.311.3.1文本文件的写入所有可能取值如表11-2所示。这个参数是非强制的,默认文件访问模式为“rt”(为文本文件时,通常省略标识符“t”)。buffering:指定了读写文件的缓存模式。0表示不缓存,1表示缓存,大于1表示缓冲区的大小,-1表示缓冲区的大小为系统的默认值。encoding:指定对文本进行编码和解码的方式,只适用于文本模式。可以使Python支持的任何编码格式(GBK、UTF-8、CP936等),默认值取决于操作系统,Windows下默认值为CP936。文本文件的读取与写入11.3文本文件的读取与写入11.32.把字符串写入文本文件在打开文件后,可以使用文件对象中的方法write()和writelines()把字符串写入文本文件,还可以使用文件对象方法flush()强制把缓冲的数据更新到文件中。(1)flush()主动把缓冲区中的数据更新到文件中。文本文件的读取与写入11.3(2)write()write()方法用于向一个打开的文件中写入指定的字符串。在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时在文件中看不到写入的内容。注意:write()方法不会自动在字符串的末尾添加换行符“\n”。write()方法的语法格式如下:fileObject.write(str)参数str:要写入文件的字符串。返回值:写入的字符长度。在操作文件时,每调用一次write()方法,写入的数据就会追加到文件末尾。文本文件的读取与写入11.3例11-1下面的代码演示了write()方法的使用:fp=open("test.txt","w")#以写方式打开文本文件fp.write("Mynameis
Guido
van
Rossum!\n")fp.write("I
invented
the
Python
programming
language!\n")fp.write("I
love
Python!\n")fp.close()程序运行后,会在当前路径下生成一个名为test.txt的文件,打开该文件,可以看到数据成功被写入。注意:当向文件中写入数据时,如果文件不存在,系统会自动创建一个文件并写入数据;如果文件存在,则清空原来文件的数据,写入新数据。文本文件的读取与写入11.3(3)writelines()writelines()方法把字符串列表写入文本文件,不添加换行符“\n”。文本文件的读取与写入11.3例11-2文件data.txt中存储一系列整数,读取文本文件data.txt中的所有整数,并按照升序排序后写入文本文件data_desc.txt中,代码如下:withopen("data.txt","r")asfp:data=fp.readlines()#读取所有数据,放入到列表中
data=[int(line.strip())forlineindata]#提取每行的数据,删除两端空白字符
data.sort(reverse=False)#原地排序
data=[str(i)+"\n"foriindata]#生成要写入的列表内容withopen("data_desc.txt","w")asfp:fp.writelines(data)文本文件的读取与写入11.33.关闭文件在写入文件完成后,应该使用close()方法关闭流,以释放资源,并把缓冲的数据更新到文件中。文件类中的flush()方法将缓冲区的数据写入文件,但是不关闭文件,使用close()函数关闭一个已打开的文件,关闭后的文件不能再进行读写操作,否则会触发ValueError异常。close()方法允许调用多次。需要注意的是,即使写了关闭文件的代码,也无法保证文件一定能够正常关闭。例如,如果在打开文件之后和关闭文件之前发生了错误导致程序崩溃,这时文件就无法正常关闭。在管理文件对象时推荐使用with关键字,可以有效避免这个问题。文件在读写结束后会自动关闭,即使是异常引起的结束也是如此。文本文件的读取与写入11.3例11-3编程新闻稿内容“北京市明天傍晚有雨”,在news.txt这个空文件中,写入新闻稿内容“北京市明天傍晚有雨”。file=open("news.txt",mode='w')file.write("北京市明天傍晚有雨")file.close()以上代码可以用with来完成:withopen("news.txt",mode='w')asfile:file.write("北京市明天傍晚有雨")文本文件的读取与写入11.311.3.2文本文件的读取文本文件的读取一般包括3个步骤,即打开文件、读取数据和关闭文件。1.打开文件对象打开文件的方法与文本文件写入时打开的方法一致,也是用Python内置的open()函数来打开文件对象。2.从打开的文本文件中读取字符数据在打开文件后,可以使用方法读取字符数据。Python文件对象提供了三个用于文件读取的方法:read()、readline()和readlines()。文本文件的读取与写入11.311.3.2文本文件的读取(1)read()方法read()方法从文件当前位置开始读取size个字符串,若无参数size,则表示读取至文件结束为止。如果多次使用,那么后面读取的数据是从上次读完后的位置开始的。read()语法结构如下:fileObject.read([size])参数size:从文件中读取的字符数。如果没有指定字符数,那么就表示读取文件的全部内容。返回值:从文件中读取的字符内容。文本文件的读取与写入11.3例11-4下面的代码演示了read()方法的使用。withopen("test.txt","r")asfp:#生成要写入的列表内容
content=fp.read(10)print(content)运行结果如下:Mynameis文本文件的读取与写入11.3(2)readline()方法该方法每次只读取文件中的一行内容,读取时占用内存小,比较适合大文件。该方法返回一个字符串对象。readline()语法如下:fileObject.readline()返回值:读取的字符串。文本文件的读取与写入11.3例11-5下面的代码演示了readline()方法的使用。withopen("test.txt","r")asfp:#以只读方式打开文件
line=fp.readline()print("读取第一行:%s"%(line))print("-----------华丽的分割线------------")whileline:#循环读取每一行
print(line)line=fp.readline()print("文件",,"已经成功分行读出!")文本文件的读取与写入11.3例11-5下面的代码演示了readline()方法的使用。运行结果如下:读取第一行:MynameisGuidovanRossum!-----------华丽的分割线------------MynameisGuidovanRossum!IinventedthePythonprogramminglanguage!IlovePython!文件test.txt已经成功分行读出!文本文件的读取与写入11.3程序运行后,在当前的路径下以只读方式读取名为test.txt的文本文件,读取第一行内容并打印。之后循环读取每一行的内容,可以看到数据被成功读出。readline()方法读取的是一行内容,带有换行符“\n”,而且print()函数默认输出后会以“\n”结束,所以输出时会有空行。文本文件的读取与写入11.3(3)readlines()方法readlines()方法读取文件的所有行,保存在一个列表中,每行作为列表的一个元素,在读取大文件时会比较占用内存。该列表内容可以通过for循环进行读取。readlines()方法语法如下:fileobject.readlines()返回值:包含所有行的列表。文本文件的读取与写入11.3例11-6下面的代码演示了readlines()方法的使用。withopen("test.txt","r")asfp:lines=fp.readlines()print(("列表形式存放每一行:%s"%(lines)))print("-----------华丽的分割线------------")forlineinlines:#依次读取每行
line=line.strip()#去掉每行头尾空白字符
print("读取的数据为:%s"%(line))print("文件",,"已经成功把所有行读出!")文本文件的读取与写入11.3执行结果为:列表形式存放每一行:['MynameisGuidovanRossum!\n','IinventedthePythonprogramminglanguage!\n','IlovePython!\n']-----------华丽的分割线------------读取的数据为:MynameisGuidovanRossum!读取的数据为:IinventedthePythonprogramminglanguage!读取的数据为:IlovePython!文件test.txt已经成功把所有行读出!文本文件的读取与写入11.33.关闭文件关闭文件的方法与11.3.1中的方法一致,用户可以使用close()方法关闭流,以释放资源,但是通常采用with语句,以保证系统自动关闭打开的流。二进制文件的读写11.4在使用open()函数打开或者创建一个文件时可以指定打开模式为’b’,以打开二进制文件。文本文件用于存储编码的字符串,二进制文件直接存储字节码,被广泛应用于存储各种程序数据,例如图像文件、音频/视频文件等。二进制文件的读写11.4二进制文件的写入一般包括3个步骤,即打开文件、写入数据和关闭文件。11.4.1文本文件的读取1.创建或打开文件对象通过内置函数open(),指定打开模式为’b’,可以创建或打开二进制文件,并且可以指定覆盖模式和缓存大小。2.写入字节流到二进制文件在打开文件后,可以使用其实例方法write(),写入字节数据到二进制文件,还可以使用实例方法flush()强制把缓冲区的数据更新到文件中。二进制文件的读写11.411.4.1文本文件的读取3.关闭文件关闭文件的方法与11.3.1中的方法一致,用户可以使用close()方法关闭流,以释放资源,但是通常采用with语句,以保证系统自动关闭打开的流。二进制文件的读写11.411.4.2二进制文件的读取1.打开文件对象通过内置函数open(),指定打开模式为"b",可以创建或打开二进制文件,并且可以指定覆盖模式和缓存大小。二进制文件的读写11.411.4.2二进制文件的读取2.从打开的文本文件中读取字符数据在打开文件后,可以使用下列实例方法读取字符数据:read():从文件中读取剩余内容直至文件结尾,返回一个bytes对象。read(n):从文件中最多读取n个字节,返回一个bytes对象;如果n为负数或None,读取直至文件结尾。readinto(b):从文件中最多读取len(b)个字节到bytes对象b。二进制文件的读写11.411.4.2二进制文件的读取3.关闭文件关闭文件的方法与11.3.1中的方法一致,用户可以使用close()方法关闭流,以释放资源,但是通常采用with语句,以保证系统自动关闭打开的流。文件对象的常用方法11.511.4.2二进制文件的读取文件操作在各类应用软件的开发中占有重要的地位。无论是文本文件还是二进制文件,在Python中其一些常规的基本的操作都是相同的。利用open()函数把文件打开后,就创建了一个文件(file)对象,文件对象是Python的一个内置对象,该对象提供了很多函数来操作文件,表11-3列出了文件对象常用的方法。文件对象的常用方法11.5CSV文件的读取和写入11.6CSV格式存储的文件一般采用.csv为扩展名,可以通过Windows平台上的记事本或者Excel工具打开,也可以在其他操作系统平台上用文本编辑工具打开。一般的表格数据处理工具都可以将数据另存为或导出为CSV格式,用于不同工具间进行数据交换。Python提供了一个读写CSV的标准库,可以通过importcsv使用。csv库包含操作CSV格式最基本的功能,csv.reader()和csv.writer()。CSV文件的读取和写入11.61.csv.reader和CSV文件的读取csv.reader对象用于从CSV文件读取数据,格式为列表对象,其构造函数为:csv.reader(csvfile,dialect="excel",**fmtparams)其中,csvfile是文件对象或list对象;dialect用于指定CSV的格式模式,不同程序输出的CSV格式有细微差别;fmtparams用于指定特定格式,以覆盖dialect中的格式。csv.reader对象是可迭代对象。11.6.1CSV文件的读取CSV文件的读取和写入11.62.csv.DictReader和CSV文件的读取使用csv.reader对象从CSV文件读取数据,结果为列表对象row,需要通过索引row[i]访问。如果希望通过CSV文件的首行标题字段名访问,则可以使用csv.DictReader对象的函数,以返回map:csv.DictReader(csvfile,filename=None,restkey=None,restval=None,dialect="excel",*args,**kwds)其中,csvfile是文件对象或list对象;其中,csvfile是任何支持write()方法的对象,通常为文件对象;dialect用于指定CSV的格式模式,不同程序输出的CSV格式有细微差别;fmtparams用于指定特定格式,以覆盖dialect中的格式。例11-7使用csv.reader对象读取CSV文件(北京地区信息.csv)。importcsvdefreadcsv(csvfilepath):withopen(csvfilepath,newline='')asf:#打开文件
f_csv=csv.reader(f)#创建csv.reader对象
headers=next(f_csv)#标题
print(headers)forrowinf_csv:print(row)if__name__=="__main__":readcsv(r'北京地区信息.csv')CSV文件的读取和写入11.6运行结果为:['省级单位','地级单位','县级单位','区划类型','行政面积(K㎡)','户籍人口(万人)','男性','女性','GDP(亿元)','常住人口(万人)']['北京','北京','西城区','市辖区','51','146.47','72.88','73.59','3602.36','125.9']['北京','北京','东城区','市辖区','42','97.41','47.91','49.5','2061.8','87.8']['北京','北京','丰台区','市辖区','306','115.33','58.39','56.95','1297.03','225.5']CSV文件的读取和写入11.6CSV文件的读取和写入11.61.csv.writer和CSV文件的写入csv.writer对象用于把列表对象数据写入到CSV文件,其函数为:csv.writer(csvfile,dialect="excel",**fmtparams)其中,csvfile是任何支持write()方法的对象,通常为文件对象;dialect用于指定CSV的格式模式,不同程序输出的CSV格式有细微差别;fmtparams用于指定特定格式,以覆盖dialect中的格式。11.6.2CSV文件的写入CSV文件的读取和写入11.62.csv.DictWriter和CSV文件的写入如果需要写入map数据到CSV,可以使用csv.DictWriter对象的函数:csv.DictWriter(csvfile,filename=None,restval="",extrasaction="raise"dialect="excel",*args,**kwds)其中,csvfile是文件对象或list对象;其中,csvfile用于指定字段名;可选的restval用于指定默认数据;可选的extrasaction用于指定多余字段时的操作;其他参数同csv.writer对象。11.6.2CSV文件的写入例11-8使用csv.writer对象写入CSV文件。importcsvdefwritecsv(csvfilepath):headers=["学号","姓名","性别","班级","语文","数学","英语"]rows=[('101511','王二丫','女','一班','72','85','82'),('101512','金镶箔','男','一班','92','95','89')]withopen(csvfilepath,'w',newline='')asf:#打开文件
f_csv=csv.writer(f)#创建csv.writer对象
f_csv.writerow(headers)f_csv.writerows(rows)if__name__=="__main__":writecsv(r'scores.csv')CSV文件的读取和写入11.6例11-8使用csv.writer对象写入CSV文件。importcsvdefwritecsv(csvfilepath):headers=["学号","姓名","性别","班级","语文","数学","英语"]rows=[('101511','王二丫','女','一班','72','85','82'),('101512','金镶箔','男','一班','92','95','89')]withopen(csvfilepath,'w',newline='')asf:#打开文件
f_csv=csv.writer(f)#创建csv.writer对象
f_csv.writerow(headers)f_csv.writerows(rows)if__name__=="__main__":writecsv(r'scores.csv')CSV文件的读取和写入11.6对象序列化11.7在程序运行时,其数据对象创建在内存中。如果需要将其持久保存到磁盘,或通过网络传递给其他计算机,则需要通过对象序列化机制。对象序列化也称为串行化,即将对象转换为数据格式,并转储到磁盘文件或通过网络实现跨平台传输。反过来,从磁盘数据文件或接收到的数据形式恢复,以得到相应的对象的过程,则称为反序列化。多个对象可以串行化到磁盘文件,用户不必关心数据的格式。对象序列化机制被广泛用于各种分布式并行处理系统。使用pickle/cPickle模块中提供的函数可以实现Python对象的序列化。cPickle使用C语言实现,故其运行效率更高。另外marshal模块也提供了类似的函数,但pickle模块更具有普遍意义。11.7.1对象序列化概述对象序列化11.7pickle模块实现了Python数据对象的序列化和反序列化。pickle.dumps(obj)#将对象obj将对象序列化pickle.loads(file)#从file中读取并重构一个对象11.7.2pickle模块和对象序列化对象序列化11.7例11-9
pickle序列化示例。importpicklevCard={"firstName":"名",'lastName':'姓','title':"职位",'mobilephoneNumber':,'organization':"公司名",'weChatNumber':"微信号"}bytes=pickle.dumps(vCard)print(bytes)对象序列化11.7运行结果为:b'\x80\x03}q\x00(X\t\x00\x00\x00firstNameq\x01X\x03\x00\x00\x00\xe5\x90\x8dq\x02X\x08\x00\x00\x00lastNameq\x03X\x03\x00\x00\x00\xe5\xa7\x93q\x04X\x05\x00\x00\x00titleq\x05X\x06\x00\x00\x00\xe8\x81\x8c\xe4\xbd\x8dq\x06X\x11\x00\x00\x00mobilephoneNumberq\x07X\x0b\x00\x00\x0013325874875q\x08X\x0c\x00\x00\x00organizationq\tX\t\x00\x00\x00\xe5\x85\xac\xe5\x8f\xb8\xe5\x90\x8dq\nX\x0c\x00\x00\x00weChatNumberq\x0bX\t\x00\x00\x00\xe5\xbe\xae\xe4\xbf\xa1\xe5\x8f\xb7q\x0cu.'对象序列化11.7json模块类似于pickle模块,也可以实现对象序列化,并可与其他语言编写的程序实现数据交换。JSON是一个字符串文件,pickle的结果是一个字节流,这使得在文件大小上,保存同样编码的字符,pickle的文件会小一些。JSON(JavaScriptObjectNotation)定义了一种标准格式,用字符串来描述典型的内置对象。虽然JSON原来是JavaScript编程语言的一个子集,但它现在是一个独立于语言的数据格式,所有主流编程都有产生和消费的JSON数据的库。JSON是网络数据交换的流行格式之一。Python标准库模块json包含将Python对象编码为JSON格式和将JSON解码到Python对象的函数。dumps(obj):把obj对象序列化为JSON字符串dump(obj,fp):把obj对象序列化为JSON字符串写入文件fp。loads(s):返回把JSON字符串s反序列化后的对象load(fp):返回把从文件fp中读取的JSON字符串反序列化后的对象11.7.3
json模块和JSON格式数据对象序列化11.7例11-10
json序列化示例。importjsonvCard={"firstName":"名",'lastName':'姓','title':"职位",'mobilephoneNumber':,'organization':"公司名",'weChatNumber':"微信号"}js=json.dumps(vCard)print(js)对象序列化11.7运行结果为:{"firstName":"\u540d","lastName":"\u59d3","title":"\u804c\u4f4d","mobilephoneNumber":,"organization":"\u516c\u53f8\u540d","weChatNumber":"\u5fae\u4fe1\u53f7"}文件的几个常规操作11.8Python对文件的常规操作包括重命名文件、复制文件、判断是否是文件、检查文件是否存在、获取文件的绝对路径名等。OS模块主要完成基本操作系统功能,但也包括文件操作。OS模块除了提供使用操作系统的功能和访问文件系统的简便方法外,还提供了大量文件和目录操作的方法。文件的几个常规操作11.81.复制文件在使用open()函数新建文件和进行处理之前,有可能需要先将某个文件复制一份,这时就需要进行一个文件的复制操作。在Python中,shutil.copy(src,dst)方法将源文件src复制到目标文件dst中,该函数返回目标文件名。这个函数的作用相当于Windows系统中的copy命令。文件的几个常规操作11.82.重命名文件在复制文件后,有可能需要对被复制的文件进行改名,这时就需要os.rename()方法用于重命名文件或目录,rename()方法的语法格式如下:os.rename(src,dst)参数:src是要修改的文件名或目录名,dst是修改后的文件名或目录名。如果dst是一个存在的目录,将抛出OSError异常。返回值:无。文件的几个常规操作11.83.删除文件如果文件已经操作完成需要删除,就需要os.remove()方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError异常。remove()方法语法格式:os.remove(path)参数:path是要删除的文件路径。返回值:无。例11-11
下面通过一个案例来演示rename()和remove()方法的应用,示例代码如下:importos#导入os模块print("目录为:%s"%os.listdir(os.getcwd()))#列出当前目录下的文件和子目录os.rename("test.txt","testl.txt")#重命名文件print("重命名成功!")print("重命名后目录为:%s"%os.listdir(os.getcwd()))os.remove("testl.txt")print("删除成功!")print("删除后目录为:%s"%os.listdir(os.getcwd()))文件的几个常规操作11.8运行结果为:目录为:['11-1.py','11-10.py','11-11.py','11-2.py','11-3.py','11-4.py','11-5.py','11-6.py','11-7.py','11-8.py','11-9.py','data.txt','data_desc.txt','news.txt','scores.csv','test.txt','北京地区信息.csv']重命名成功!重命名后目录为:['11-1.py','11-10.py','11-11.py','11-2.py','11-3.py','11-4.py','11-5.py','11-6.py','11-7.py','11-8.py','11-9.py','data.txt','data_desc.txt','news.txt','scores.csv','testl.txt','北京地区信息.csv']删除成功!删除后目录为:['11-1.py','11-10.py','11-11.py','11-2.py','11-3.py','11-4.py','11-5.py','11-6.py','11-7.py','11-8.py','11-9.py','data.txt','data_desc.txt','news.txt','scores.csv','北京地区信息.csv']文件的几个常规操作11.8文件的几个常规操作11.84.判断是否是文件os.path.isfile(f)方法判断f是否是一个文件,返回值是True或者False。5.检查文件是否存在os.path.exists(f)方法用于检查文件f是否存在,返回值是True或者False。6.获取绝对路径名os.path.abspath(f)方法返回f的绝对路径名。例11-12获取绝对路径名的示例如下:fromos.pathimportexists,abspathimportshutilifnotexists(r".\1.py"):#打印1.py文件所在的绝对路径
withopen(r".\1.py","wt")asfp:#创建1.py文件
fp.write("print('helloworld!')\n")filename=shutil.copy(r".\1.py","d:\\data")#复制1.py到d:\data目录下print(abspath("1.py"))#打印1.py文件所在的绝对路径运行结果为:I:\\codes\第11章\1.py文件的几个常规操作11.8Python对文件目录的操作11.9(1)创建文件夹:os.mkdir(path)方法用于创建目录,目录存在时会抛出FileExistsError异常。(2)获取当前目录:os.getcwd()返回当前工作目录。(3)改变当前目录:os.chdir(path)改变当前工作目录。(4)获取目录内容:os.listdir(path)返回path指定的目录下包含的文件或子目录的名字列表。(5)删除目录:os.rmdir(path)删除path指定的目录,如果目录非空,则抛出一个OSError异常。实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除、显示目录内容等,我们可以通过os和os.path模块提供的方法来完成。Python对文件目录的操作11.9(6)判断是否为目录:os.path.isdir(path)方法用于判断path是否为目录,返回一个布尔值。(7)连接多个目录:os.path.join(path,*paths)方法连接两个或多个path,形成一个完整的目录。(8)分割路径:os.path.split(path)方法对路径进行分割,以元组方式进行返回。os.path.splitext(path)方法从路径中分割文件的扩展名。os.path.splitdrive(path)从路径中分割驱动器名称。(9)获取路径:os.path.abspath(path)方法返回path的绝对路径;os.path.dirname(path)返回path的路径名部分。例11-13演示文件夹的相关操作。编写一个批量修改文件和目录名的小程序,实现文件和目录名前加上Python-前缀,示例代码如下:importos,os.path#导入os模块folderName='renamedir'dirList=os.listdir(folderName)#获取指定路径下所有文件和子目录的名字fornameindirList:#遍历输出所有文件和子目录的名字
print("修改前文件名:",name)newName='Python-'+nameprint("修改后文件名:",newName)os.rename(os.path.join(folderName,name),os.path.join(folderName,newName))Python对文件目录的操作11.9运行结果为:修改前文件名:1.py修改后文件名:Python-1.py修改前文件名:11-1.py修改后文件名:Python-11-1.py修改前文件名:11-2.py修改后文件名:Python-11-2.py修改前文件名:news.txt修改后文件名:Python-news.txt修改前文件名:Python-北京地区信息.csv修改后文件名:Python-Python-北京地区信息.csvPython对文件目录的操作11.9案例实战11.10例10-14
编写程序,统计指定目录下所有Python源代码文件中不重复的代码行数。只考虑扩展名为py的Python源文件,严格相等的两行视为重复行。fromos.pathimportisdir,join,isfilefromosimportlistdirallLines=[]#保存所有代码行notRepeatedLines=[]#保存不重复的代码行fileNum=0#文件的数量codeNum=0#代码总行数defgetLinesCount(directory):globalallLinesglobalnotRepeatLinesglobalfileNumglobalcodeNumforfilenameinlistdir(directory):#获取每个文件和子目录名字
temp=join(directory,filename)#合并目录和文件名,组成完整的路径名案例实战11.10ifisdir(temp):#递归遍历子文件夹
getLinesCount(temp)ifi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玉林市2025广西玉林北流市民乐镇招聘网格信息管理员1人笔试历年参考题库典型考点附带答案详解
- 城市绿地降温城市热岛论文
- 叶片热应力优化论文
- 风险感知与心理干预论文
- 肠道菌群影响抑郁症机制分析论文
- 外科患者的生命体征监测与护理
- 外科护理术前准备
- 室上性心动过速诊断及治疗中国专家共识(2021)课件
- 呼吸困难护理中的标本采集
- 初中数学七年级下册《平行线的判定》单元教学设计
- 药师执业行为规范(2026年版)
- 保安形象展示培训
- 2026年水利安全生产考核b证押题宝典通关考试题库及参考答案详解
- 《林海雪原》专项训练(简答题)解析版-2025-2026学年六年级语文下册整本书阅读(统编版五四学制)
- (教师版)必修下册课内文言文挖空+名句名篇默写小纸条滚动训练高中语文统编版选择性必修下册
- 2025年荔湾教师社招笔试真题及答案
- CMA申请介绍教学课件
- 公路桥梁养护管理工作指南
- 医院中医药临床案例库建设与管理
- 2026届湖南省长郡中学高三月考(三)英语试题及答案
- 2025至2030集成电路引线框架行业运营态势与投资前景调查研究报告
评论
0/150
提交评论