一、文件操作

"""
fp = open("文件名",mode="模式",encoding="utf-8")
fp -> 文件的io对象 (文件句柄)
i => input 输入
o => output 输出
"""

1、文件的写入

# 1.打开文件
fp = open("ceshi1.txt",mode="w",encoding="utf-8") # 把冰箱门打开 # 2.写入内容
fp.write("把大象塞进去") # 把大象放进去 # 3.关闭文件
fp.close() # 把冰箱门关上

文件的写入

2、文件的读取

# 1.打开文件
fp = open("ceshi1.txt",mode="r",encoding="utf-8") #1.打开冰箱门 # 2.读取内容
res = fp.read() # 把大象拿出来
print(res) # 3.关闭文件
fp.close() # 把冰箱门关上

文件的读取

3、字节流的转换

"""
bytes : 是用来传输或者存储的数据格式
b'1234' b"abcd" b"我爱你" -> b开头的字节流,范围只能是ascii编码 如果是中文使用encode 和 decode 来进行转换;
# 将字符串和字节流(Bytes流)类型进行转换 (参数写成转化的字符编码格式)
#encode() 编码 将字符串转化为字节流(Bytes流)
#decode() 解码 将Bytes流转化为字符串
"""
a = b''
print(a , type(a))

编码与解码

strvar = "我爱你"
# encode 编码 -> 变成二进制字节流
res = strvar.encode("utf-8")
print(res , type(res)) # decode 解码 =>二进制字节流恢复成原来的字符串
res2 = res.decode("utf-8")
print(res2 , type(res2)) # len可以计算字节个数
num = len(res)
print(num) # # 一个中文占用3个字节,通过decode 反解出爱这个字
res3 = b"\xe7\x88\xb1".decode("utf-8")
print(res3) # 程序员的表白方式
strvar = "我!是你一辈子也得不到的男人"
strvar2 = strvar.encode()
print(strvar2)

4、存储二进制字节流

不需要指定encoding编码集,否则报错

fp = open("ceshi2.txt",mode="wb")
fp.write(strvar2)
fp.close()

5、读取二进制字节流

fp = open("ceshi2.txt",mode="rb")
res = fp.read()
fp.close() print(res)
# 通过decode反解出字符串
strvar = res.decode()
print(strvar)

6、复制图片

"""图片,音频,视频"""
# 1.读取原图片所有的内容
fp = open("集合.png",mode="rb")
res = fp.read()
fp.close() # 2.把读取的内容存储到另外一个文件
# fp = open("集合2.png",mode="wb")
# 指定绝对路径(完整路径)
fp = open(r"E:\python31\day8\集合3.png",mode="wb")
fp.write(res)
fp.close()

二、文件的扩展模式

# ### 文件的扩展模式
# (utf-8编码格式下 默认一个中文三个字节 一个英文或符号 占用一个字节)
#read() 功能: 读取字符的个数(里面的参数代表字符个数)
#seek() 功能: 调整指针的位置(里面的参数代表字节个数)
#tell() 功能: 当前光标左侧所有的字节数(返回字节数)
"""
seek(0) 直接把光标移动到文件开头
seek(0,2) 直接把光标移动到文件末尾
第二个参数 0:开头 1:当前位置 2:文件末尾
"""

1、文件的扩展模式

r+ 先读后写

"""
fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
# 先读
res = fp.read()
print(res) # 后写
fp.write("1234") # 在读
fp.seek(0) # 调整光标位置在开头
res = fp.read()
print(res)
fp.close()
"""

r+ 先写后读

"""
fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
fp.seek(0,2) # 调整光标位置在末尾
fp.write("123") fp.seek(0)
res = fp.read()
print(res)
fp.close()
"""

w+ 可读可写

"""
fp = open("ceshi4.txt",mode="w+",encoding="utf-8")
fp.write("abc") fp.seek(0)
res = fp.read()
print(res)
fp.close()
"""

a+ 可读可写

"""文件不存在时,默认创建新的文件"""
"""
fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
fp.write("123") fp.seek(0)
res = fp.read()
print(res) # a模式在写入内容时,会强制把光标移动到最后
fp.seek(1)
fp.write("abc") fp.close() # 如果在r模式内,区别a模式
fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
fp.seek(1)
fp.write("abc")
fp.close()
"""

2、read  seek tell 三个函数的使用

"""
fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
res = fp.read(3)
print(res) fp.seek(6)
print(fp.read(1)) # 计算文件指针左侧所有的字节数
res = fp.tell()
print(res)
fp.close()
"""

注意点

# 注意点,seek移动中文字节的时候,有可能报错
"""
fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
fp.seek(2)
res = fp.read()
print(res)
fp.close() # print("我".encode())
# b'\xe6\x88\x91'
""" # 三.with语法的使用 (close操作with语法可以自动实现)
with open("集合.png",mode="rb") as fp:
res = fp.read() with open(r"E:\python31\day8\集合4.png",mode="wb") as fp:
fp.write(res) # 继续优化 合并with
with open("集合.png",mode="rb") as fp1 , open(r"E:\python31\day8\集合5.png",mode="wb") as fp2:
res = fp1.read()
fp2.write(res)

三、文件的相关函数

"""
# 刷新缓冲区 flush
# 当文件关闭的时候自动刷新缓冲区
# 当整个程序运行结束的时候自动刷新缓冲区
# 当缓冲区写满了 会自动刷新缓冲区
# 手动刷新缓冲区
fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
fp.write("zzz")
# 手动把缓冲区里面的内容写入文件当中
fp.flush() while True:
pass fp.close()
"""

链接:关于flush刷新

flush刷新https://blog.csdn.net/pjliyuhang/article/details/91831734

1、文件相关的函数

fp = open("ceshi6.txt",mode="a+",encoding="utf-8")
#readable() 功能: 判断文件对象是否可读
res = fp.readable()
print(res)
#writable() 功能: 判断文件对象是否可写
res = fp.writable()
print(res)
#readline()     功能: 读取一行文件内容

"""
参数 > 当前行字符总个数 => 以当前行读取
参数 < 当前行字符总个数 => 以参数的大小来读取字符的个数 默认readline 读取一行
""" """
with open("ceshi7.txt",mode="r+",encoding="utf-8") as fp:
# res = fp.readline(3000)
# print(res) # 文件对象fp也是一个可迭代对象
'''在遍历文件对象的时候,默认一次拿一行'''
for i in fp:
print(i) # 读取所有内容
with open("ceshi7.txt",mode="r+",encoding="utf-8") as fp: # 先读取一行
res = fp.readline()
# 判断是不是空
while res:
print(res)
res = fp.readline() """

1.1、readlines()

功能:将文件中的内容按照换行读取到列表当中

lst_new = []
with open("ceshi7.txt",mode="r+",encoding="utf-8") as fp:
lst = fp.readlines()
# print(lst) # ['\t窗前明月光\n', '疑是鞋两双\t\t\n', '\t\t举头王明月\n', '\t低头看裤裆']
for i in lst:
lst_new.append(i.strip()) print(lst_new) # ['窗前明月光', '疑是鞋两双', '举头王明月', '低头看裤裆']

1.2、writelines()

功能:将内容是字符串的可迭代性数据写入文件中 参数:内容为字符串类型的可迭代数据

"""可迭代型数据(容器类型数据,range对象,迭代器)"""
"""
lst = ["春眠不觉晓\n","处处蚊子咬\n","夜来大狗熊\n","一个也跑不了\n"]
# lst = [1,2,3,4] error
with open("ceshi8.txt",mode="w",encoding="utf-8") as fp:
fp.writelines(lst)
"""

1.3、truncate()

功能: 把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中 (字节)

with open("ceshi8.txt",mode="r+",encoding="utf-8") as fp:
fp.truncate(3)

四、练习

'''
#1.有如下文件,a1.txt,里面的内容为:
键盘敲烂,
月薪过万.
键盘落灰,
狗屎一堆. 分别完成以下的功能:
a:将原文件全部读出来并打印。
b:在原文件后面追加一行内容:信不信由你,反正我信了。
c:将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。
d:将原文件全部清空,换成下面的内容:
每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大。 e:将原文件内容全部读取出来,
并在'键盘落灰'这一行的前面加一行,'年薪百万'
然后将更改之后的新内容,写入到一个新文件:a1.txt。 #2.有如下文件,t1.txt,里面的内容为:
葫芦娃,葫芦娃,
一根藤上七个瓜
风吹雨打,都不怕,
啦啦啦啦。
上面的内容你肯定是心里默唱出来的,对不对 分别完成下面的功能:
a:以r+的模式打开原文件,判断原文件是否可读,是否可写。
b:以r的模式打开原文件,利用for循环遍历文件对象。
c:以r的模式打开原文件,以readlines()方法读取出来,并循环遍历
d:以r模式读取‘葫芦娃,’前四个字符。
e:以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。
f:以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。
g:以a+模式打开文件,先追加一行:‘老男孩教育’然后在全部读取出来。
h:截取原文件,截取内容:‘葫芦娃,葫芦娃,’ #3.文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
变成如下数据格式,并计算出总价格
[
{'name':'apple','price':10,'amount':3},
{'name':'tesla','price':1000000,'amount':1}
]
'''

with open("a1.txt",mode="r+",encoding="utf-8") as fp:
res = fp.read()
print(res)

1-a

with open("a1.txt",mode="a+",encoding="utf-8") as fp:
fp.write("\n\t信不信由你,反正我信了")

1-b

with open("a1.txt",mode="a+",encoding="utf-8") as fp:
fp.seek(0)
res = fp.read()
fp.write("\n\t信不信由你,反正我信了")

1-c

strvar = '''
每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大。
'''
with open("a1.txt",mode="w+",encoding="utf-8") as fp:
fp.write(strvar)

1-d

with open("a1.txt",mode="r+",encoding="utf-8") as fp1,open("a2.txt",mode="w+",encoding="utf-8") as fp2:
lst = fp1.readlines()
print(lst)
lst.insert(2,"\t年薪百万,\n")
fp2.writelines(lst)

1-e

fp = open("t1.txt",mode="r+",encoding="utf-8")
print(fp.readable())
print(fp.writable())

2-a

with open("t1.txt",mode="r",encoding="utf-8") as fp:
for i in fp:
print(i.strip())

2-b

with open("t1.txt",mode="r",encoding="utf-8") as fp:
lst = fp.readlines()
for i in lst:
print(i)

2-c

在r模式下,read读取的是字符
在rb模式下,read组曲的是字节 with open("t1.txt",mode="r",encoding="utf-8") as fp:
res = fp.read(4) # 字符个数
print(res) with open("ceshi.txt",mode="rb") as fp:
res = fp.read(3)
print(res.decode())

2-d

with open("t1.txt",mode="r",encoding="utf-8") as fp:
res = fp.readline()
print(res.strip())

2-e

with open("t1.txt",mode="r",encoding="utf-8") as fp:
lst = fp.readlines()
# print(lst)
# print(lst[2:])
for i in lst[2:]:
print(i)

2-f

with open("t1.txt",mode="a+",encoding="utf-8") as fp:
fp.write("\n\t老男孩教育")
fp.seek(0)
print(fp.read())

2-g

with open("t1.txt",mode="r+",encoding="utf-8") as fp:
fp.truncate(24)

2-h

lst_new = []
total = 0
with open("a.txt",mode="r+",encoding="utf-8") as fp:
lst = fp.readlines()
print(lst)
for i in lst:
dic = {}
name,price,amount = i.strip().split()
dic["name"] = name
dic["price"] = float(price)
dic["amount"] = float(amount)
lst_new.append(dic)
total += dic["price"] * dic["amount"]
print(lst_new)
print(total)

3

day9.关于文件的操作的更多相关文章

  1. day9 python学习 文件的操作 读 写 seek

    文件的操作 1   文件的打开操作: 文件句柄 = open('文件路径', '模式') f=open('wangyakun','a+',encoding='utf-8') #文件名, 如果是绝对路径 ...

  2. Linux命令-文件文本操作grep

    文件文本操作 grep 在文件中查找符合正则表达式条件的文本行 cut 截取文件中的特定字段 paste 附加字段 tr 字符转换或压缩 sort 调整文本行的顺序,使其符合特定准则 uniq 找出重 ...

  3. [No000083]文件与文件夹操作

    #region Folder option 文件夹操作 /// <summary> /// 指定目录是否存在 /// </summary> /// <param name ...

  4. PHP 文件夹操作「复制、删除、查看大小」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

  5. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  6. OC NSFileHandle(文件内容操作)

    OC NSFileHandle(文件内容操作) 初始化 [NSFileHandle fileHandleForUpdatingAtPath:@"data.txt"]; //file ...

  7. python对文件的操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  8. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  9. Adobe AIR对本地文件(XML文件)的操作

    引用:http://addiwang.blog.163.com/blog/static/118130772011221114230288/ Air的文件操做主要涉及两个类,FIle和FileStrea ...

随机推荐

  1. SpringBoot集成MyBatis小记

    SpringBoot集成MyBatis小记 参考MyBatis官网 1. 添加maven依赖 添加到pom.xml <dependency> <groupId>org.myba ...

  2. Mysql 常用语句实战(1)

    前置 sql 语句 用来创建表.插入数据 DROP TABLE IF EXISTS `emp`; CREATE TABLE `emp` ( `id` int(11) NOT NULL COMMENT ...

  3. Qt-文件系统

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=45 参考文档:<Qt教程.docx> 说明:本文主要介绍Qt的文件系统. ...

  4. 数据分析03 /基于pandas的数据清洗、级联、合并

    数据分析03 /基于pandas的数据清洗.级联.合并 目录 数据分析03 /基于pandas的数据清洗.级联.合并 1. 处理丢失的数据 2. pandas处理空值操作 3. 数据清洗案例 4. 处 ...

  5. Python之 爬虫(十二)关于深度优先和广度优先

    网站的树结构 深度优先算法和实现 广度优先算法和实现 网站的树结构 通过伯乐在线网站为例子: 并且我们通过访问伯乐在线也是可以发现,我们从任何一个子页面其实都是可以返回到首页,所以当我们爬取页面的数据 ...

  6. bzoj4300绝世好题

    bzoj4300绝世好题 题意: 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0.n≤100000,ai≤10^9. 题解: 用f[i]表示当前二进制i为1 ...

  7. 用Canvas定时显示摄像头捕获的画像(HTML5)

    需要实现一个功能,大意嘛,就是标题写的那个意思.虽然用户只要求在微信中实现即可,也就是可以用JSSDK.但是前端小哥哥脑袋一根筋,就想用原生的H5和JS实现. 网上铺天盖地的资料,可惜没有一个是可以用 ...

  8. IDEA 格式化代码快捷键

    一般都是:Ctrl+Alt+L 如果未格式化的话,可能与以下软件的快捷键冲突了: QQ 网易云 也可能是其他的快捷键组合,具体可查看工具栏Code->Reformat Code: 也可重新设置i ...

  9. Shell基本语法---处理海量数据的sed命令

    sed命令 shell脚本三剑客之一 处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到 ...

  10. SQL数据多条转单条(CONCAT_WS)

    一.concat()函数可以连接一个或者多个字符串 concat(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. select conc ...