Python 文件
1. 文件操作
对文件操作流程:
- 打开问价,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
1.1 打开模式
w write 写入模式 文件不存在则创建文件,存在的话则打开清空内容,并且将文件指针放在文件的开头 r read 读取模式 文件不存在则报错! 存在的话则打开文件,并且将文件指针放在文件的开头 a append 追加模式 文件不存在则创建文件,存在的话则打开文件,*并且将文件指针放在文件的末尾* x xor 异或模式 文件已存在则报错! 不存在的话则创建文件,将文件指针放在文件的开头 U 表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U b bytes模式,表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注) #扩展模式 (配合打开模式的辅助模式,自己单独不能使用) + plus 增强模式(可以让文件具有读写功
组合使用:
rb # 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 r+ # 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ # 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 wb # 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 w+ # 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb+ # 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 ab # 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ # 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ # 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
2. 语法
fp = open("文件名",mode="a+",encoding="utf-8") # 需要手动关闭文件 或 with open("文件名",mode="a+",encoding="utf-8") as fp: # 自动关闭文件
3. 相关操作
f = open("test.txt",mode="r+",encoding="utf-8") f.read() # 读取字符的个数(里面的参数代表字符个数) f.tell() # 把现在的文件句柄所在的指针打印出来。(返回字节数) f.flush() # 强制刷新 f.seek(0) # 调整指针的位置(里面的参数代表字节个数) print(f.encoding) # 打印文件编码 print(f.fileno) # 返回文件句柄在内存中的编号 f.name() # 打印名字 f.isatty() # 是不是终端设备 f.readable # 判断文件是否可读 f.writable # 判断文件是否可写 f.truncate() # 把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中 (字节) f.readline() # 读取一行文件内容 f.readlines() # 将文件中的内容按照换行读取到列表当中 f.writelines() # 将内容是字符串的可迭代性数据写入文件中 参数:内容为字符串类型的可迭代数据 f.close() # 关闭文件
4. 例子
4.1 修改原文件方式
def alter(file,old_str,new_str): """ 替换文件中的字符串 :param file:文件名 :param old_str:就字符串 :param new_str:新字符串 :return:
不建议使用,文件小可以使用 """ file_data = "" with open(file, "r", encoding="utf-8") as f: for line in f: if old_str in line: line = line.replace(old_str,new_str) file_data += line with open(file,"w",encoding="utf-8") as f: f.write(file_data) alter("file1", "09876", "python")
4.2 把原文件写到新文件里
4.2.1 字符串替换
import os def alter(file,old_str,new_str): """ 将替换的字符串写到一个新的文件中,然后将原文件删除,新文件改为原来文件的名字 :param file: 文件路径 :param old_str: 需要替换的字符串 :param new_str: 替换的字符串 :return: None """ with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2: for line in f1: if old_str in line: line = line.replace(old_str, new_str) f2.write(line) os.remove(file) os.rename("%s.bak" % file, file) alter("file1", "python", "测试")
4.2.2 正则替换
import re,os def alter(file,old_str,new_str): with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2: for line in f1: f2.write(re.sub(old_str,new_str,line)) os.remove(file) os.rename("%s.bak" % file, file) alter("file1", "admin", "password")