目录
1.文件编码
文件编码——翻译的规则,UTF-8 是全球通用的编码格式,除有特殊需求,一般都用 UTF-8 格式
计算机只认识“0 和 1”,使用编码技术(密码本)将内容翻译成 0 和 1 存入
2.文件操作
文件基础操作的三个步骤:
打开文件:open(name,mode,encoding)
读写文件:read()
关闭文件:close()
(1)文件操作的相关方法
操作 | 功能 | 备注 |
文件对象 = open(file, mode, encoding) | 打开文件获得文件对象 | |
文件对象 .read(num) | 读取指定长度字节 | 多次使用read,下一个read会从上一次读到的结尾处,接着去读取 |
文件对象 .readline() | 读取一行 | |
文件对象 .readlines() | 读取全部行,得到列表 | |
for line in 文件对象 | for 循环文件行,一次循环得到一行数据 | |
文件对象 .close() | 关闭文件对象 | 文件读取完成后,要关 闭文件对象,否则文件会被一直占用 |
with open() as f | 通过 with open 语法打开文件,可以自动关闭 |
(2)文件的打开
open(name,mode,encoding)
name :文件所在的具体路径 或 目标文件名(文件要与python代码在同一层级)
mode :设置打开文件的访问模式 :只读(r)、写入(w)、追加(a)等。
encoding: 编码格式(推荐使用 UTF-8 )
模式 | 描述 |
r | 以只读方式打开文件。 文件的指针将会放在文件的开头。默认模式。 |
w | 打开一个文件只用于写入。 如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。 |
a | 打开一个文件用于追加。 ①如果该文件已存在,新的内容将会被写入到已有内容之后; |
(3)文件的读取
f = open("D:/poem.txt","r",encoding="UTF-8")
new_f = f.read()
count = new_f.count("up")
print(count)
f.close()#记得关闭文件
(ps:注意:此时的`f是`open`函数的文件对象,对象是Python中一种特殊的数据类型,拥有属性和方法。可以使用对象.属性或对象.方法对其进行访问.
(4)文件的写入
#打开文件
f = open("D:/poem.txt","w",encoding="UTF-8")
#文件写入(直接调用 write ,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区)
f.write("to make everyday count!")
#刷新内容到硬盘中(当调用 flush 的时候,内容会真正写入文件)
f.flush()
注意事项:
使用” w” 模式时:
• 文件不存在,会创建新文件
• 文件存在,会将原有内容全部清空close() 方法,带有 flush() 方法的功能
(5)文件的追加
#打开文件
f = open("D:/diary.txt","a",encoding="UTF-8")
#文件写入(直接调用 write ,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区)
f.write("\nToday is also a beautiful day!")#追加内容会接在原有内容之后,最好是带有换行符号\n
#关闭文件,文件对象.close自带flush刷新功能
f.close()
注意事项:
使用”a” 模式时:
• 文件不存在,会创建新文件
• 文件存在,会在最后追加写入文件
3.文件操作综合案例
要求:
读取文件
将文件写出到 bill.txt.bak 文件作为备份
同时,将文件内标记为测试的数据行丢弃
'''
实现思路:
open 和 r 模式打开一个文件对象,并读取文件
open 和 w 模式打开另一个文件对象,用于文件写出
for 循环内容,判断是否是测试不是测试就 write 写出,是测试就 continue 跳过
一些小细节:
字符串.strip()用来出去每行的首尾空格和换行符
字符串.split(分隔符字符串),但字符串本身不变,但得到了一个列表对象,故不能写成
line = line.split(",")
line[4] =="测试"
文件写入的write()只能是字符串
'''
#打开文件
f1 = open("D:/bill.txt","r",encoding = "UTF-8")
f2 = open("D:/bill.txt.bak","w",encoding = "UTF-8")
#判断是否为丢弃数据
for line in f1:
line =line.strip() #移除首尾的空格和换行符
if line.split(",")[4] =="测试": #字符串 .split(分隔符字符串),但字符串本身不变,而是得到了一个列表对象
continue
f2.write(line)
f2.write("\n")
#关闭文件
f1.close()
f2.close()