Python文件操作
文章目录
- Python文件操作
- @[toc]
- 1.文件的编码
- 2.文件打开、读取(r模式)、关闭
- 3.文件的写入(w模式)
- 4.文件的追加写入(a模式)
- 5.综合案例
文章目录
- Python文件操作
- @[toc]
- 1.文件的编码
- 2.文件打开、读取(r模式)、关闭
- 3.文件的写入(w模式)
- 4.文件的追加写入(a模式)
- 5.综合案例
1.文件的编码
- 意义:计算机只能识别0和1,计算机使用编码技术将丰富文本文件的内容翻译成0和1存入,同时也需要编码将计算机保存的0和1反向翻译回可以识别的内容。计算机有许多可用编码,例如UTF-8、GBK、Big5等。不同的编码,将内容翻译成二进制也是不同的。UTF-8是目前全球通用的编码格式。
2.文件打开、读取(r模式)、关闭
-
打开文件:open(name,mode,encoding),name是要打开的目标文件名的字符串(文件的具体路径),mode是设置打开文件的模式(访问文件的模式):只读、写入、追加等,encoding是编码格式(推荐使用UTF-8)。使用该函数,可以打开一个已经存在的文件或者创建一个新文件。
几种访问文件的模式:
模式 | 描述 |
---|---|
r | 以只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式 |
w | 以写入的模式打开文件,如果该文件已经存在则打开该文件,并从头开始编辑,原有内容会被删除,如果该文件原先不存在,则创建新文件。 |
a | 打开一个文件用于追加。如果该文件存在,新的内容将会被写到已有内容之后,如果该文件不存在,创建新文件进行写入。 |
- 文件的打开、读取、关闭操作
操作 | 功能 |
---|---|
文件对象 = open (file, mode, encoding) | 打开文件获得文件对象 |
文件对象.read (num) | 读取指定长度字节,不指定 num 读取文件全部 |
文件对象.readline () | 读取一行,多写几个就是依次读取 |
文件对象.readlines () | 读取全部行,封装得到列表 |
for line in 文件对象 | for 循环文件行,一次循环得到一行数据 |
文件对象.close () | 关闭文件对象 |
with open() as f | 通过 with open 语法打开文件,自动创建文件对象,并可以自动关闭文件 |
# 每个example.txt文件都是
'''
1234567
abcdefg
8910
hijk
'''# 打开文件,open("文件路径", "读取方式", encoding="编码类型")
f = open("D:/pythonlearning/example.txt", "r", encoding="UTF-8")
print(type(f))
print(20 * "*")# 读取文件,文件对象.read(num),读取文件的前num个字节,若没有传入num,则读取全部
print(f.read(10))
print(f.read()) # 接着上面的f.read(10)读
print(20 * "*")# 读取文件,文件对象.readlines(),读取文件每一行,封装为列表
print(f.readlines()) # 同样也是接着上面继续读,所以输出结果是个空列表
k = open("D:/pythonlearning/example1.txt", "r", encoding="UTF-8")
print(k.readlines()) # 读取一个全新的文件,把每一行分割,封装为列表
print(20 * "*")# 读取文件,文件对象.readline(),使用一次读取一行
g = open("D:/pythonlearning/example2.txt", "r", encoding="UTF-8")
line1 =g.readline()
line2 =g.readline()
line3 =g.readline()
print(line1)
print(line2)
print(line3)
print(20 * "*")# 用for循环读取文件行
m = open("D:/pythonlearning/example3.txt", "r", encoding="UTF-8")
for line in m:print(line)
print(20 * "*")# 关闭文件,文件对象.close()。关闭程序对文件的占用# with open语法:with open("文件路径", "读取方式", encoding="编码类型") as 文件对象:,可以自动创建文件对象以及自动关闭文件
with open("D:/pythonlearning/example4.txt", "r", encoding="UTF-8") as n:for line in n:print(line)# 输出结果
'''
<class '_io.TextIOWrapper'>
********************
1234567
ab
cdefg
8910
hijk
********************
[]
['1234567\n', 'abcdefg\n', '8910\n', 'hijk']
********************
1234567abcdefg8910********************
1234567abcdefg8910hijk
********************
1234567abcdefg8910hijk
'''
练习
exercise.txt文件如下,要求统计hello这个单词出现的次数
hello hi hello good
if while hello yes hello hello
yes good hello
hello
hello
f = open("D:/pythonlearning/exercise.txt", "r", encoding="UTF-8")
k = 0
for line in f:my_str = line.strip("\n") # 删除首尾可能出现的换行符my_str = my_str.strip(" ") # 删除首尾可能出现的换行符new_list = my_str.split(" ") # 分隔,成为列表k += new_list.count("hello")
print(k)
f.close()# 输出结果
'''
8
'''
3.文件的写入(w模式)
- 写入内容:文件对象.write(写入的内容)
- 文件内容刷新:文件对象.flush()直接调用write,内容并没有真正写入文件,而是会积攒在程序的内存中,称之为缓存区,这时候需要调用flush,内容才会真正写入文件。这么做是为了避免频繁操作硬盘,导致效率下降(攒一起,一次性写入)
# 创建一个新的文件,并进行写入操作
f = open("D:/pythonlearning/1.txt", "w", encoding="UTF-8") # 写入模式“w”
f.write("hello world")
f.flush() # 刷新内容
f.close() # close函数有内置flush刷新功能,关闭的同时也对文档进行了更新# 打开一个已经存在的文件,并进行写入操作
g = open("D:/pythonlearning/example.txt", "w", encoding="UTF-8") # 写入模式“w”,会把已有文件全部清空
g.write("hello world")
f.close()# example文件结果
'''
hello world
'''
4.文件的追加写入(a模式)
# 创建一个新的文件,并进行追加写入操作
f = open("D:/pythonlearning/2.txt", "a", encoding="UTF-8") # 追加写入模式“a”
f.write("hello world")
f.flush() # 刷新内容
f.close() # close函数有内置flush刷新功能,关闭的同时也对文档进行了更新# 打开一个已经存在的文件,并进行写入操作
g = open("D:/pythonlearning/example1.txt", "a", encoding="UTF-8") # 追加写入模式“a”,在已有内容后面继续加内容
g.write("\nhello world")
f.close()# example1文件结果
'''
1234567
abcdefg
8910
hijk
hello world
'''
5.综合案例
exercise1.txt文件如下:
name,date,money,type,remarks
周伦,2022-01-01100000,消费,正式
周伦,2022-01-02,300000,收入,正式
周伦,2022-01-03,100000,消费,测试
林节,2022-01-01,300000, 收入,正式
林节,2022-01-02,100000, 消费,测试
林节,2022-01-03,100000, 消费,正式
林节,2022-01-04,100000, 消费,测试
林节,2022-01-05,500000, 收入,正式
张油,2022-01-01,100000, 消费,正式
张油,2022-01-02,500000, 收入,正式
张油,2022-01-03,900000, 收入,测试
王鸿,2022-01-01,500000, 消费,正式
王鸿,2022-01-02,300000, 消费,测试
王鸿,2022-01-03,950000, 收入,正式
刘滑,2022-01-01,300000, 消费,测试
刘滑,2022-01-02,100000, 消费,正式
刘滑,2022-01-03,300000, 消费,正式
完成以下操作:
(1)读取文件
(2)将文件写出到new.txt文件
(3)同时,将文件内标记为测试的数据行丢弃
f = open("D:/pythonlearning/exercise1.txt", "r", encoding="UTF-8")
g = open("D:/pythonlearning/new.txt", "a", encoding="UTF-8")
for line in f:str1 = line.strip(" ")str_last = str1.strip("\n")new_list = str_last.split(",")if "正式" in new_list:g.write(str_last + "\n")
f.close()
g.close()# 输出结果
'''
周伦,2022-01-01100000,消费,正式
周伦,2022-01-02,300000,收入,正式
林节,2022-01-01,300000, 收入,正式
林节,2022-01-03,100000, 消费,正式
林节,2022-01-05,500000, 收入,正式
张油,2022-01-01,100000, 消费,正式
张油,2022-01-02,500000, 收入,正式
王鸿,2022-01-01,500000, 消费,正式
王鸿,2022-01-03,950000, 收入,正式
刘滑,2022-01-02,100000, 消费,正式
刘滑,2022-01-03,300000, 消费,正式
'''
2-01-01,300000, 收入,正式
林节,2022-01-03,100000, 消费,正式
林节,2022-01-05,500000, 收入,正式
张油,2022-01-01,100000, 消费,正式
张油,2022-01-02,500000, 收入,正式
王鸿,2022-01-01,500000, 消费,正式
王鸿,2022-01-03,950000, 收入,正式
刘滑,2022-01-02,100000, 消费,正式
刘滑,2022-01-03,300000, 消费,正式
'''