赞
踩
# 文件读写,在使用的时候和我们正常使用文件一样 # 1.打开文件 # 2.操作文件 # 3.关闭文件 # 打开文件使用open函数即可 # 格式: open(file_name(文件路径), mode(读写模式)) 使用该函数会返回一个文件对象 # 文件路径:可以写相对路径, 也可以写绝对路径,路径需要以字符串形式传入 # 读写模式: r(只读) w(写入) a()追加 file = open('python.txt', 'r') print(file) # <_io.TextIOWrapper name='python.txt' mode='r' encoding='UTF-8'> 在windows中默认读写格式是gbk print(type(file)) # <class '_io.TextIOWrapper'> # 将读取出来的内容进行打印 print(file.read()) # 关闭文件 file.close() # 为什么要关闭文件? # 在文件打开状态是会保持连接,这种状态下会持续消耗内存,不利于服务器性能优化(内存泄漏) # 关闭文件后,文件对象有没有被释放? # 没有释放 print(file) # <_io.TextIOWrapper name='python.txt' mode='r' encoding='UTF-8'> # 文件关闭后,相当于与文件的连接状态消失了,但是文件对象没有发生变化 # 在文件关闭后,file对象不能进行任何读写操作,因为已经无法连接文件 # ValueError: I/O operation on closed file. 无法操作一个已经关闭的文件 print(file.read())
# 文件在'r'模式下可以进行文件读取 # read 可以读取文件 # 打开文件 file = open('python.txt', 'r') # 读取文件 # n:在read中传入数值,代表我们读取的最大字符数 # 如果开发中有一个文本文件,比如网络小说,4个G大小,一次性读取,用户依次读取这么大的文件,极度消耗性能,而且 等待时间过长 # 所以在开发中我们经常会给读取数据的值做一个限定,最大读取字符一般限定为(1024*1024) # 那我们使用read只能依次读取3个字符,那省下的字符我们怎样读取呢? # 文件每一次读取,都会持续向后读取,直到文件关闭或程序结束,所以可以使用循环进行读取 # 在所有的文件内容读取完成后,会持续返回空字符串("") while True: content = file.read(3) if content == '': break print(content) # 关闭文件 file.close()
readline: 每次读取一行数据,以\n为分隔符,在一个文件开启后,多次执行读取操作会持续向后读取,如果字符全部被读取完成,则返回空字符串“”
readlines:一次性将文件全部读取,读取后,将文字以一行为一个元素保存到列表当中进行返回
# 除了read外还有一些读取方式 # 文件打开 file = open('python.txt', 'r') # 文件操作 # readline 使用这种方式读取文件,每次读取一行以\n为分隔符,并且在文件打开状态下,会持续向下读取,直到所有文件被读取完成后,会读取空字符串"" # while True: # content = file.readline() # if content == '': # break # print(content,end='') # readlines 读取所有的文件以\n为分隔符,将所有的行以字符串元素的方式保存到列表当中进行返回 # ['吴丝蜀桐张高秋\n', '空山凝云颓不流\n', '举头望明月\n', '低头思故乡\n'] content = file.readlines() print(content) # 文件关闭 file.close()
# write 写入 # 当文件读写模式时 'w',可以使用文件的写入操作 # 当文件执行写入模式打开时,如果被打开的文件不存在,则重新创建一个新的文件,不会报错 # file = open('test.txt', 'w') # 当文件执行写入模式打开时,如果被打开的文件存在,则会将源文件内的字符清空 # 如果使用windows电脑进行开发,在写入文件时,需要制定编码格式为'utf-8' # 如果使用linux 或者mac 默认是utf-8编码 不需要转码 file = open('python.txt', 'w', encoding='utf-8') # 当完成文件的读写操作时,我们写入文件 和读取文件所使用的编码格式必须一致 # UnicodeDecodeError: 'gbk' codec can't decode byte 0x89 in position 14: illegal multibyte sequence print(file) # <_io.TextIOWrapper name='python.txt' mode='w' encoding='UTF-8'> # 写入操作 # file.write('我爱北京天安门,天安门上太阳升') # 如果写入的字符串时三对引号包过内部的换行符会不会写入呢? 会写入格式 file.write(""" 我爱北京天安门, 天安门上太阳升 """) # writelines 是配合readlines进行使用的,可以将一个由字符串元素组成的列表一次性写入文件 # file.writelines('我爱北京天安门') lines = ['吴丝蜀桐张高秋\n', '空山凝云颓不流\n', '举头望明月\n', '低头思故乡\n'] file.writelines(lines) file.close()
# 'a'模式写入:追加模式
# 在追加模式下可以进行文件字符的追加,在原有数据的末尾添加 新的字符
# 在追加模式下打开文件,如果文件存在,则不会讲源文件清空
# file = open('python.txt', 'a', encoding='utf-8')
# 在追加模式下打开文件,如果文件不存在,则新建一个文件
# 打开文件
file = open('bigdata.txt', 'a', encoding='utf-8')
# 进行追加操作(注意:没有append方法,追加操作也是使用write进行写入,只不过不会清空源文件)
file.write('乱我心者今日之日多烦忧')
# 关闭文件
file.close()
a: a a + ab ab+
w: w w + wb wb+
r: r r + rb rb+
# 需求:用户输入一个文件名,通过文件读写操作进行文件备份,并且将备份文件名称更改为:源文件名[备份].后缀 # 1.获取用户键入的文件名 # 2.要通过文件读写操作进行备份 # 2.1.拼接备份后的文件的文件名 # 2.2.读取源文件 # 2.3.写入新文件 # 1.获取用户键入的文件名 file_name = input('请输入您要备份的文件名称:') file = open(file_name, 'r', encoding='utf-8') # 2.要通过文件读写操作进行备份 # 2.1.拼接备份后的文件的文件名 copy_file_name = file_name.replace('.', '[备份].') # 打开新文件 copy_file = open(copy_file_name, 'a') # # 读取旧文件数据 # content = file.read() # # 写入新文件 # copy_file.write(content) # 一般情况下,文件都是指定单次读取的最大字符的 # 循环进行读取并写入,直到所有字符读取完成 while True: content = file.read(3) if content == '': break copy_file.write(content) # 关闭文件 file.close() copy_file.close()
# 如果想要使用这两个方法,就要去进行模块导入 import os # rename 重命名 >>>类似于linux命令中的mv # 格式:os.rename(旧文件路径,新文件路径) # 需求:将Python.txt重命名为 abc.txt # rename可以对文件进行重命名 # rename中源文件路径必须存在 # os.rename('bigdata.txt', 'abcd.txt') # 文件可以通过rename进行移动,移动的位置根据新文件路径决定,移动后同样可以修改名称 # os.rename('abcd.txt', '文件/abcd.txt') # 文件移动时必须有文件名称,否则无法移动,移动后可以改名 # os.rename('abc.txt', '文件/a.txt') # remove 删除文件 >>> 类似于linux里的rm # 可以删除文件,但是不会有任何提示,但是也不会出现在回收站中,误删后无法回复,删除需谨慎 # os.remove('bigdata[备份].txt') # 可以删除指定路径下的文件 # 如果被删除的路径不存在,则报错 (路径可以使用绝对路径,和相对路径) # os.remove('文件/a.txt') # os.remove('python[备份].txt') # PermissionError: [Errno 1] Operation not permitted: '文件' # 使用remove不能删除文件夹 os.remove('文件')
# 在使用下方函数或方法时,需要先导入os模块方可使用 import os # mkdir 创建文件夹 # FileExistsError: [Errno 17] File exists: 'student' # 如果创建的文件夹已经存在则报错 # os.mkdir('student') # 可以在已经存在的文件夹下创建文件夹 # os.mkdir('文件/students') # FileNotFoundError: [Errno 2] No such file or directory: 'aaa/bbb' # os.mkdir('aaa/bbb') # 如果上级目录不存在则无法创建文件夹 # rmdir 删除文件夹 # FileNotFoundError: [Errno 2] No such file or directory: 'aaa/bbb' # 如果删除的文件已经不存在,则会报错 # os.rmdir('student') # os.rmdir('文件/students') # 如果文件夹非空使用rmdir能否删除 # OSError: [Errno 66] Directory not empty: '文件' # 如果文件非空则不能使用rmdir删除,需要进行递归删除 # os.rmdir('文件') # getcwd 可以获取当前活动的工作目录 >> 类似于linux中的pwd # /Users/day08/02-代码 # 默认工作目录就是我们工程所在的根目录 print(os.getcwd()) # chdir 切换工作目录 >> 类似于linux中的cd # os.chdir('文件') # /Users/day08/02-代码/文件 # print(os.getcwd()) # listdir 指定目录下的目录结构 >>> 类似于linux命令中的ls # ['04-文件写入.py', '文件', '.DS_Store', '08-文件夹的操作.py', 'python[备份].txt', '01-文件读写操作体验.py', '00-作业讲解.py', '02-文件的读取.py', 'test.txt', '07-rename和remove.py', '06-文件备份案例.py', '03-其他读取方式.py', '05-文件追加.py', '.idea'] # print(os.listdir()) # os.chdir('文件') # 如果listdir括号内没有书写对应的路径,则我们使用的路径就是工作目录,如果工作目录进行了切换则查找目录结构的位置也发生了变化 # ['abcd.txt'] # print(os.listdir()) # 查询指定位置的目录结构,可以在listdir括号内填写指定的目录,我们就会查询该目录的结构 # ['abcd.txt'] print(os.listdir('文件'))
# 需求:批量修改指定目录下所有文件的文件名 ''' 1.修改时可以通过参数控制是增加,还是删除字符 2.传入指定字符用于增加或者删除 3.使用rename进行重命名 ''' # 导入os模块 import os # 定义一个控制增加还是删除的变量,True是增加 False 是删除 flag = False # 指定字符的定义 str1 = '[中国创造]' # 构造多个文件:要在文件目录下构造 test1-test10 十个文件 # for i in range(1, 11): # open('文件/test' + str(i), 'w') # 定义函数 def modify_files_name(flag, str1, path): # 切换工作目录为指定的目录path os.chdir(path) # 遍历指定路径下的所有文件名称 for file_name in os.listdir(): # 判断时增加字符还是删除字符 if flag: # 重命名添加文件前缀 os.rename(file_name, str1 + file_name) else: # 重命名删除文件名中指定的字符 os.rename(file_name, file_name.replace(str1, '')) # 将文件目录下所有的文件添加[中国创造]的前缀 # modify_files_name(flag, str1, '文件') modify_files_name(flag, str1, '文件')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。