Python学习笔记——Day08
今天复习文件处理。
文件处理复习
模式 | 描述 |
---|---|
t | 文本模式(默认) |
x | 写模式,新建一个文件,如果该文件已存在则会报错 |
b | 二进制模式 |
+ | 打开一个 |
U | 通用换行模式 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头 |
rb+ | 打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
上图是对上面的集中模式的一个总结。事实上,这个图和表格我都是从菜鸟教程得到的。
既然都已经有俩了,那就再来一张表吧,多多益善。
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
创建 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
额,不得不说,写上瘾了,那再来一段吧。
File对象的属性
属性 | 描述 |
---|---|
file.close | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false,否则返回true。 |
声明:以上内容均来自菜鸟教程,感谢菜鸟教程!
接下来写一些代码来说明文件操作。
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:文件处理
import os
def main():
# f = open("a.txt", "r")
# 读取
# str = f.read()
# print("read():" + str)
# 读取一行
# str = f.readline(1024)
# print("readline(): " + str)
# 遍历每行
# for line in f.readlines():
# print(line)
# ---------------------------
# 读取二进制
# f = open("a.txt", "rb")
# str = f.read()
# print(str)
# 写
# f = open("a.txt", "w+")
# length = f.write("haha")
# print(length)
# 输出指针位置
# print(f.tell())
# 重置指针为第一位
# f.seek(os.SEEK_SET)
# f.seek(0)
# print(f.read())
# 追加
# f = open("a.txt", "a+")
# f.write("lalala")
# f.seek(os.SEEK_SET)
# print(f.read())
# f.close()
# 事实上我们可以不用自己手动调用f.close()
# python使用with自动调用close方法
# with open("a.txt", "a+") as f:
# f.write("\nsdlfkjsdf")
# f.seek(os.SEEK_SET)
# print(f.read())
# next 方法
# with open("a.txt", "r+") as f:
# print(next(f))
# print(next(f))
# 写入行
# with open("a.txt", "w") as f:
# f.writelines("sdf\nsdlfjsfd\nlsdkjxcv")
# 文件属性
with open("a.txt", 'r') as f:
print("文件名: " + f.name)
print("文件采用的分隔符: " + str(f.newlines))
print("文件编码:" + f.encoding) # 事实上是GBK
print("文件报错级别:" + f.errors)
print("文件打开模式:" + f.mode)
print("文件缓冲:" + str(f.line_buffering))
print("文件是否关闭:" + str(f.closed))
if __name__ == "__main__":
main()
小案例
写一首古诗
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:写古诗
def main():
with open("古诗.txt", "w+", encoding="utf-8") as f:
f.writelines(" 静夜思\n 李白\n")
f.writelines("床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。")
f.seek(0)
print(f.read())
if __name__ == "__main__":
main()
图片复制
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:写古诗
def main():
with open("我是图片.png", "rb") as f:
with open("我是复制的.png", "wb") as copy_f:
copy_f.write(f.read())
if __name__ == "__main__":
main()
写一个py文件并执行
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:写py文件并执行
import os
def main():
with open("我是py文件.py", "w+", encoding="utf-8") as f:
f.write("print('hello world')")
os.system("python 我是py文件.py")
if __name__ == "__main__":
main()
结语
大概是这样子吧。
如果你发现我的文章哪里有错误或者有什么好的想法可以联系我,我们一起学习共同进步,我的邮箱地址是lishuangCHN@gmail.com
let’s do more of those!