py07-文件处理
"""
什么是文件?
操作系统提供给用户操作复杂硬件(硬盘)的简易的接口
为什么操作文件
人或者应用程序需要永久的保存数据
如何用
f = open()
f.read()
f.close()
"""
# 通过python代码操作文件
# r取消转义
# f = open(r'D:\Python项目\day07\a.txt',encoding='utf-8') # 向操作系统发送请求 打开某个文件
# # 应用程序要想操作计算机硬件 必须通过操作系统来简介的操作
# print(f) # f是文件对象
# print(f.read()) # windows操作系统默认的编码是gbk
# f.read() # 向操作系统发请求 读取文件内容
# f.close() # 告诉操作系统 关闭打开的文件
# print(f)
# print(f.read())
# 文件上下文操作
with open(r'D:\Python项目\day07\a.txt',encoding='utf-8') as f ,\
open(r'D:\Python项目\day07\b.txt',encoding='utf-8') as f1: # f仅仅是一个变量名 你把它看成是一个遥控器
print(f)
print(f.read())
print(f1)
print(f1.read())
"""
文件打开的模式
r 只读模式
w 只写模式
a 追加写模式
操作文件单位的方式
t 文本文件 t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码
b 二进制 一定不能指定encoding参数
"""
# mode参数 可以不写 不写的话默认是rt 只读的文本文件 这个t不写默认就是t
# with open(r'D:\Python项目\day07\a.txt',mode='r',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(f.read()) # 一次性将文件内容全部读出
# with open(r'D:\Python项目\day07\1.jpeg',mode='rb') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(f.read()) # 一次性将文件内容全部读出
# r模式在打开文件的时候 如果文件不存在 直接报错
# 文件路径可以写相对路径 但是需要注意该文件必须与执行文件在同一层文件下
# with open(r'a.txt',mode='r',encoding='utf-8') as f:
# with open(r'a.txt','r',encoding='utf-8') as f1: mode关键字可以不写
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(">>>1:")
# print(f.read()) # 一次性将文件内容全部读出
# print('>>>2:')
# print(f.read()) # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
# print(f.readlines()) # 返回的是一个列表 列表中的一个个元素对应的就是文件的一行行内容
# for line in f: # f可以被for循环 每for循环依次 读一行内容
# print(i) # 这个方法 就可以解决大文件一次性读取占用内存过高的问题
# print(f.readline()) # 只读取文件一行内容
# print(f.readline())
# print(f.readline())
# print(f.readline())
# w模式:w模式一定要慎用
# 1.文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下 会先清空文件内容再写入
# with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\r')
# f.write('不不不,你没有翻~')
# l = ['不sdffs,sdfs有翻~\n','不sdfsdf不,你sdfsf翻~\n','不sfad不,你没sa翻~\n']
# f.writelines(l)
# # 上下等价
# for i in l:
# f.write(i)
# a模式
# 1.当文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后
# with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# f.write('我是小尾巴\n')
"""
r
w
a
将上面的三个模式称为纯净模式
r+
w+
a+
"""
# with open(r'test',mode='r+',encoding='utf-8') as f:
# print(f.readable())
# print(f.writable())
# print(f.readline())
# f.write('嘿嘿嘿')
# with open(r'test',mode='w+',encoding='utf-8') as f:
# print(f.readable())
# print(f.writable())
# print(f.readline())
# f.write('嘿嘿嘿')
# with open(r'test',mode='r+b') as f:
# print(f.readable())
# print(f.writable())
# res = f.read()
# # print(res.decode('utf-8'))
# res1 = str(res,encoding='utf-8')
# print(res1)
# 在rt模式下 read内的数字 表示的是字符的个数
# 初次之外,数字表示的都是字节
# with open(r'test','r',encoding='utf-8') as f:
# print(f.read(5))
# with open(r'test','rb') as f:
# res = f.read(10) # 读的是三个字节bytes
# print(res)
# print(res.decode('utf-8'))
# 文件内光标的移动
"""
f.seek(offset,whence)
offset:相对偏移量 光标移动的位数
whence:
0:参照文件的开头 t和b都可以使用
1:参照光标所在的当前位置 只能在b模式下用
2:参照文件的末尾 只能在b模式下使用
"""
# with open(r'test','rt',encoding='utf-8') as f:
# print(f.read(1))
# # f.seek(6,0) # seek移动都是字节数
# # f.seek(4,0) # seek移动都是字节数
# # print(f.read(1))
# f.seek(0,0)
# print(f.read(1))
# f.seek(0, 0)
# print(f.read(1))
# f.seek(6,0)
# print(f.read())
# with open(r'test','rb') as f:
# print(f.read(3).decode('utf-8'))
# f.seek(0,0)
# print(f.read(3).decode('utf-8'))
# f.seek(7,0)
# print(f.read(1).decode('utf-8'))
# # f.seek(6,0) # seek移动都是字节数
# # f.seek(4,0) # seek移动都是字节数
# with open(r'test','rb') as f:
# print(f.read(3).decode('utf-8'))
# f.seek(3,1)
# print(f.read(1))
# f.seek(6,0) # seek移动都是字节数
# f.seek(4,0) # seek移动都是字节数
# with open(r'test','rb') as f:
# print(f.read())
# f.seek(-4,2)
# print(f.read().decode('utf-8'))
# with open(r'test','r+',encoding='utf-8') as f:
# f.seek(3,0)
# f.write('过')
#修改文件
# with open(r'test','r+',encoding='utf-8') as f:
# f.seek(6,0)
# f.write('h')
# 修改文件
# 先将数据由硬盘读到内存(读文件)
# 在内存中完成修改(字符串的替换)
# 再覆盖原来的内容(写文件)
# with open(r'test02.txt','r',encoding='utf-8') as f:
# data = f.read()
# print(data)
# print(type(data))
#
# with open(r'test02.txt','w',encoding='utf-8') as f:
# res = data.replace('egon','jason')
# print(data)
# f.write(res)
"""
优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
缺点:当文件过大的情况下,可能会造成内存溢出
"""
# 文件修改方式2
# 创建一个新文件
# 循环读取老文件内容到内存进行修改 将修改好的内容写到新文件中
# 将老文件删除 将新文件的名字改成老文件名
import os
with open(r'test02.txt','r',encoding='utf-8') as read_f,\
open(r'test02.swap','a',encoding='utf-8') as write_f:
for line in read_f:
new_line = line.replace('jason','egon')
write_f.write(new_line)
os.remove('test02.txt')
os.rename('test02.swap','test02.txt')
"""
优点:内存中始终只有一行内容 不占内存
缺点:再某一时刻硬盘上会同时存在两个文件
py07-文件处理的更多相关文章
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级
一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...
随机推荐
- MySQL错误锦集【持续更新】
[42000][1075] Incorrect table definition; there can be only one auto column and it must be defined a ...
- Linux内存占用过高排查过程
1 查看服务器状态 系统是 CentOS Linux release 7.5.1804 (Core)使用top命令看了下系统的状态 系统的整体负载和cpu并不高,但是内存使用比较高(总8G使用了7.2 ...
- C++ cannot bind non-const lvalue reference of type ‘Dog&’ to an rvalue of type ‘Dog’
void function(Dog & d){ /************** } 调用这个函数,如果传参一个右值对象,临时对象,则会出现这个问题 一个临时对象的引用,这怎么想都不合理 从该函 ...
- Socket:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
https://blog.csdn.net/weixin_45932157/article/details/113999801 最近服务器的Socket代理软件经常报这个错误:log:Error On ...
- Vulnhub:CK-00靶机
kali:192.168.111.111 靶机:192.168.111.196 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...
- '大龄‘后端程序员,快速捡起ECMAScript6
1.Promise 2.迭代器 3.async 4.module 5. this的理解
- 【面试题】XSS攻击是什么?
XSS攻击是什么? 要点: XSS是跨站脚本攻击.向目标网站插入恶意代码.大量用户访问网站时运行恶意脚本获取信息 答: XSS是跨站脚本攻击(Cross Site Scripting),不写为CSS是 ...
- (已经成功部署)配置vue+nginx+uwsgi luffy项目
2019-9-16 21:16:17 由于超哥视频翻车,应该是先改api.js中的IP 再打包 然后按照原来一步一步部署vue uwsgi Nginx 然后就可以直接访问了!!! 昨天其实就完成,只 ...
- (app笔记)如何执行monkey命令测试稳定性
1.monkeyMonkey 就是SDK中附带的一个工具,向系统发送伪随机的用户事件流,为了测试软件的稳定性.健壮性,验证app是否出现ANR or Crush 操作: 2. adb devices ...
- (jmeter笔记)有序递增和无序递增
有序递增:计数器 Track counter independently for each user: 不勾选,每个线程引用,顺延递增 勾选 ,每个线程引用,重新计算 Reset counter on ...