1.打开文件 2.读写等操作 3.关闭文件
1.功能:使⽤open函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新文件。
2.语法:
文件对象.open(name,mode,[encoding]) name:是要打开的⽬标⽂件名的字符串(可以包含⽂件所在的具体路径)。 mode:设置打开⽂件的模式(访问模式):只读、写⼊、追加等。 encoding:对文本文件的编码和解码方式,只适用于文本文件(txt/csv等),如GBK,CP936等。 只读:即'r',以只读⽅式打开⽂件。⽂件的指针将会放在⽂件的开头。这是默认模式。 写⼊:即'w',打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。 追加:即'a',打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。3.示例:
f = open('test.txt','w') f.write('aaa') f.close() #结果:自动创建了一个名为‘test’格式为txt的文件,打开里面信息为aaa4.注意: ①对于open(name,‘r’):只读,如果文件不存在,则报错;如果文件存在,则进行读操作。光标在开头。 ②对于open(name,‘w’):写入,如果文件不存在,则新建一个文件;如果文件存在,则执行写入操作,每次执行写入都会覆盖原来的内容。光标在开头。 ③对于open(name,‘a’):追加,如果文件不存在,则新建一个文件;如果文件存在,则在原来内容基础上,追加新内容。光标在结尾 ④访问模式mode也可以省略,省略时默认’r’(只读)
1.语法:
with open(name,mode,[encoding]) as fp: {文件操作(fp....)} name:是要打开的⽬标⽂件名的字符串(可以包含⽂件所在的具体路径)。 mode:设置打开⽂件的模式(访问模式):只读、写⼊、追加等。 encoding:对文本文件的编码和解码方式,只适用于文本文件(txt/csv等),如GBK,CP936等。2.使用原因:
在文件读写过程中,可能导致程序崩溃,即使使用close()也不能正常关闭文件(依旧开着)。而with open()函数中,对文件的操作是写在缩进中的,只要代码退出缩进,就会自动关闭文件,有效处理了文件无法正常关闭的情况。
3.示例:
文件1.txt中的内容:
aaaaa with open('1.txt','r+') as fp: content = fp.read() print(content) #结果:aaaaa用这三个函数之前的open()里面的mode必须是’w’ 1.语法:
文件对象.write('内容')2.示例:
with open('test.txt','w') as fp: fp.write('xxx') #结果:生成一个名为test的txt文件,文件的内容是:xxx用这三个函数之前的open()里面的mode必须是’r’ 1.read()函数: ①语法:
⽂件对象.read(num)②注意:num表示要从⽂件中读取的数据的⻓度(单位是字节),如果没有传⼊num,那么就表示读取⽂件中所有的数据。 ③示例:
text文件中:
aaaaa bbbbb ccccc ddddd eeeee无参数:
with open('test.txt','r') as fp: content = fp.read() print(content) #结果: # aaaaa # bbbbb # ccccc # ddddd # eeeee有参数:
with open('test.txt','r') as fp: content = fp.read(10) print(content) #结果: # aaaaa # bbbb文件内容中有看不见的换行符’\n’,会占用一个字节位
2.readlines()函数: ①功能:readlines()可以按照行的方式把整个⽂件中的内容进行⼀次性读取,并且返回的是⼀个列表,其中每⼀行的数据为作为列表的⼀个元素。 ②语法:
文件对象.readlines()③示例:
text文件中:
aaaaa bbbbb ccccc ddddd eeeee最后一行e后面没有换行
with open('test.txt','r') as fp: print(fp.readlines()) #结果:['aaaaa\n', 'bbbbb\n', 'ccccc\n', 'ddddd\n', 'eeeee']3.readline()函数: ①功能:readline()⼀次读取⼀⾏内容,即用第一次读取第一行的内容,用第二次读取第二行的内容… ②语法:
文件对象.readline()③示例:
text文件中:
aaaaa bbbbb ccccc ddddd eeeee with open('test.txt','r') as fp: print(fp.readline())#读取test第一行:aaaaa print(fp.readline())#读取test第二行:bbbbb print(fp.readline())#读取test第三行:ccccc #结果: # aaaaa # # bbbbb # # ccccc各访问模式(mode)的功能: 特点: 1.带+的:可读可写 2.带b的:以二进制格式打开文件 3.带r的:文件指针在文件内容的开头 4.带w的:文件指针在文件内容的开头 5.带a的:文件指针在文件内容结尾 6.r+:没有该文件则报错;文件的指针在开头,能读取出数据 7.w+:没有文件会新建文件;文件指针在开头,有写操作时,就能读取数据,没有写操作时,新内容会覆盖就内容,无法读取数据 8.a+:没有文件会新建文件;文件指针在结尾,无法读取文件中的数据
①作⽤:⽤来移动⽂件指针。 ②语法:
⽂件对象.seek(偏移量, 起始位置) 起始位置: 0:⽂件开头 1:当前位置 2:⽂件结尾③注意:先执行起始位置移动光标,后根据偏移量再便宜光标。 ④示例: 文件test里面的内容:
aaaaa bbbbb ccccc ddddd eeeee先读取并显示test文件里的东西:
f = open('test.txt','r+') con = f.read() print(con) f.close() #结果: # aaaaa # bbbbb # ccccc # ddddd # eeeee重新设置光标初始位置:设置成从开头往右两个
f = open('test.txt','r+') f.seek(2,0) con = f.read() print(con) f.close() #结果: # aaa # bbbbb # ccccc # ddddd # eeeee f = open('test.txt','a+') #mode为a+时,光标在文件内容的结尾 f.seek(0,0) #将光标调整到文件内容的开头,如果不调整,打印出来的内容为空 con = f.read() print(con) f.close() #结果: # aaaaa # bbbbb # ccccc # ddddd # eeeee1.需求:⽤户输⼊当前⽬录下任意⽂件名,程序完成对该⽂件的备份功能(备份⽂件名为xx[备份]后缀,例如:test[备份].txt)。
2.步骤: ①接收⽤户输⼊的⽂件名 ②规划备份⽂件名 ③备份⽂件写⼊数据
3.代码实现
#1.接收用户输入的文件名 old_name = input('请输入您想要备份的文件名:') #2.规划备份文件名 #2.1提取目标文件后缀 #2.2组织备份的文件名:xx[备份]后缀 #从右边开始找第一个'.'的下标 index = old_name.rfind('.') #只有文件有效(.后缀前面必须有东西,即index>0)才进行如下操作 if index>0: postfix = old_name[index:] #组织新文件名:旧文件名+[备份]+后缀 new_name = old_name[:index] + '[备份]' + postfix #3,将备份文件写入数据 #3.1打开源文件和备份文件 #3.2将源文件的数据写入备份文件 #3.3关闭文件 old_f = open(old_name,'rb') new_f = open(new_name,'wb') while True: con = old_f.read(1024) if len(con) == 0: break new_f.write(con) old_f.close() new_f.close()运行前需要备份的文件test.txt,它的内容:
aaaaa bbbbb ccccc ddddd eeeee运行改程序备份该文件后,出现一个test[备份].txt文件,它的内容:
aaaaa bbbbb ccccc ddddd eeeee