Python_14文件操作
一、文件操作:
Python提供了必要的函数和方法进行默认情况下的文件基础操作。可以用file对象做大部分的文件操作。
open函数,你必须先用Python内置的open函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。
语法:file object = open(file_name[,access_mode][,buffering])
各个参数细节如下:
file_name:包含你要访问的文件名称的字符串值。
access_mode:决定了打开文件的模式:只读、写入,追加等。所有可取值如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。对文件的操作包含r、w、a。
1、r:只读方式打开文件。
2、rb:以二进制格式打开一个文件用于只读。
3、r+:打开一个文件用于读写。
4、rb+:以二进制格式打开一个文件用于读写。
5、w:写的方式打开文件,表示新建或覆盖文件,也有wb,w+,wb+,与r类似
6、a:追加的方式打开文件,表示在文件末尾添加内容,也有ab,a+,ab+。
注:r、w方式操作文件时,文件指针指向文件开头,a方式时,指向文件末尾
buffering:如果buffering的值被设为0,就不回有寄存。如果buffering的值取1,访问文件会寄存行。如果将buffering的值设为大于1的整数,表明这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
File对象的属性:
file.closed :返回true,如果文件已被关闭,否则返回false。
file.mode :返回被打开文件的访问模式。
file.name :返回文件的名称。
file.encoding :返回文件的编码。
1 #Python文件操作基础2022.08.14 2 import os 3 # txtPath = 'E:\\Python_code\\project01\\chapter04_02\\test.txt' #第一种方法直接写目录 4 # print(os.getcwd()) #返回当前模块的目录 5 6 txtPath = os.getcwd()+'\\test.txt' #如果工作当中项目需要移植代码到其他同事哪里时,那么如果不把这个地址也放到E盘对应目录下项目就会报错,所以使用os.getcwd()方法替换 7 txtfile = open(txtPath,'r') #file object = open(file_name,[,access_mode][,buffering]) 8 #access_mode:决定打开文件的模式:只读,只写,追加等。非强制的,默认文件访问模式为只读r 9 #buffering的值被设为0,就不会有寄存,取1访问文件会寄存,大于1表示寄存区的缓存大小,取负值,系统缓冲大小则为系统默认 10 11 12 print(txtfile.closed) #返回true如果文件已关闭,否则返回False 13 print(txtfile.mode) #返回被打开文件的访问模式 14 print(txtfile.name) #返回文件的名称 15 print(txtfile.encoding) #返回文件编码
二、往文件写入数据:
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不仅仅是数字。Write()方法不在字符串结尾不添加换行符('\n'):
flush()方法刷新内部缓冲,直接把内部缓冲区的数据立刻写入文件
语法:
fileObject.write(string)
fileObject.flush()
文件位置:
Tell()方法告诉你文件内的当前位置,换句话说,下一次的读写会发生在文件开头这么多字节之后。
seek(offset,[from])方法改变当前位置。Offset变量表示要移动的字节。From变量指定开始移动字节的参考位置。如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设置为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
其他操作文件的方法:
fp.readline([size]) :读一行,如果定义了size,有可能返回的只是一行的一部分
fp.readines([size]) :把文件每一行作为一个list成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
fp.writelines(seq) :把seq的内容全部写到文件中(多行一次性写入)。如果需要换行,则需要自己加入每行的换行符。
fp.next() :返回下一行,并将文件操作标记位移到下一行。如果需要换行则要自己加入每行的换行符 python2.7支持
1 #Python文件操作基础2022.08.14 2 import os 3 # txtPath = 'E:\\Python_code\\project01\\chapter04_02\\test.txt' #第一种方法直接写目录 4 # print(os.getcwd()) #返回当前模块的目录 5 6 txtPath = os.getcwd()+'\\test.txt' #如果工作当中项目需要移植代码到其他同事哪里时,那么如果不把这个地址也放到E盘对应目录下项目就会报错,所以使用os.getcwd()方法替换 7 txtfile = open(txtPath,'r') #file object = open(file_name,[,access_mode][,buffering]) 8 #access_mode:决定打开文件的模式:只读,只写,追加等。非强制的,默认文件访问模式为只读r 9 #buffering的值被设为0,就不会有寄存,取1访问文件会寄存,大于1表示寄存区的缓存大小,取负值,系统缓冲大小则为系统默认 10 11 12 print(txtfile.closed) #返回true如果文件已关闭,否则返回False 13 print(txtfile.mode) #返回被打开文件的访问模式 14 print(txtfile.name) #返回文件的名称 15 print(txtfile.encoding) #返回文件编码
1 # 第四章文件读操作 2 import os 3 filePath = os.getcwd()+'\\test.txt' 4 txtFile = open(filePath,'r') 5 # content = txtFile.read() #读取所有内容 6 # print(content) 7 8 # content = txtFile.read(3) #读取部分内容,传入count就只读count个字符串 9 # print(content) 10 11 12 # content = txtFile.readline() #读取一行 参数 size 13 # print(content) 14 15 16 lines = txtFile.readlines() #读取多行,返回列表 参数size 返回保护size的行 17 print(lines)
1 #第四章文件写入操作2022.08.14 2 import os 3 filePath = os.getcwd()+'\\write.txt' 4 txtFile = open(filePath,'w') #w写的方式打开文件,表示新建或覆盖文件 5 6 7 # txtFile.write('ssss') 8 # txtFile.flush() 9 10 lista = ['hello\n','world\n','ni\n','hao\n'] 11 txtFile.writelines(lista) #把seq序列的内容全部写文件中(多行一次性写入)。如果需要换行则需要自己加入每行的换行符。 12 txtFile.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件 13 txtFile.close() #关闭文件
1 #第四章文件写入操作2022.08.14 2 import os 3 filePath = os.getcwd()+'\\write.txt' 4 txtFile = open(filePath,'a') #a追加的方式打开文件,r、w操作文件时,文件指针指向文件开头,a方式时,指向末尾 5 txtFile.write('123456') 6 txtFile.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件 7 txtFile.close() #关闭文件
三、目录操作:
mikdir()方法:可以使用os模块的mikdir()方法,在当前目录下创建新的目录
语法:os.mikdir("newdir")
chdir()方法:可以用chdir()方法来改变当前的目录
语法:os.mikdir("newdir")
rmdir()方法:删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。
语法:os.rmdir("dirname")
makedirs()方法:创建多级目录
语法:os.makedirs("c:\python\test")
getcwd()方法:得到当前工作目录
语法:os.getcwd()
isdir()/isfile()方法:检验给出的路径是否是一个目录/文件
语法:os.path.isdir("E:\\book\\temp")
1 #第四章文件位置操作 2 import os 3 filePath = os.getcwd()+'\\write.txt' 4 txtFile = open(filePath,'rb') #需要以二进制的方式rb去读,才能使用seek(3,1),seek(3,2)当前指针和末尾指针位置偏移 5 6 # s1 = txtFile.read(3) 7 # print(txtFile.tell()) 8 # s2 = txtFile.read(4) 9 # print(txtFile.tell()) #tell()查看文件指针位置 10 # print(s1) 11 # print(s2) 12 13 s1 = txtFile.read(3) 14 txtFile.seek(-3,2) #改变了文件指针的当前位置,seek(offset,from),offset表示移动的字节数,from设为0,以文件开头作为移动字节参考位置,1是当前,2是结尾 15 s2 = txtFile.read(3) 16 print(s1) 17 print(s2)
1 #第四章文件删除、重命名、目录操作2022.08.14周日PM 2 import os 3 import shutil 4 5 # os.rename('a.txt','b.txt') #将a.txt改成b.txt 6 # os.rename('.\\b.txt','.\\a.txt') #相对路径写法,也可绝对路径 7 # os.remove('.\\a.txt') #移除文件a.txt 8 # os.mkdir('test1') #使用os模块的mkdir()方法在当前目录下创建新的目录 9 # os.chdir('test1') #可以用chdir()方法来改变当前的目录 10 # print(os.getcwd()) #os.getcwd()得到当前工作目录 11 # os.mkdir('test2') 12 # os.chdir('test1') 13 # os.rmdir('test2') #删除目录,目录名称以参数传递。在删除这个目录之前,它的所以内容应该先被清除。 14 15 # os.chdir('test1') 16 # os.mkdir('test2') 17 18 # os.rmdir('test1') 19 # os.makedirs('.\\a\\b\\c') #创建多级目录 20 # shutil.rmtree('.\\a') #删除多级目录,需要import shutil 21 22 boolean = os.path.isdir('test1') #检验给出路径是否是一个目录 23 print(boolean) 24 b = os.path.isfile('Demo01.py') #检验给出的路径是否是一个文件 25 print(b)