一、常用方法


# 写文件--开始
f=open('test','w',encoding="utf-8") #如果有则写,没有就创建
print(f.writable()) #True
f.write('11111\n');
f.writelines(['22222\n','223333\n']);
f.write('33333\n');
f.close();
# 写文件--结束 # 读取文件--开始
f=open('test',encoding="utf-8")
# data=f.read();
# print(data);
print(f.readable())
print(f.readline()) #一次读一行
print(f.readlines()) #一次所有行
f.close();
# 读取文件--结束 # 追加文件--开始 在光标处追加
f=open('test','r+',encoding="utf-8")
print(f.writable()) #True
f.write('一\n');
f.writelines(['二\n','223333\n']);
f.write('三\n');
f.close();
# 追加文件--结束 # 追加文件--开始 在光标处追加
f=open('test','a',encoding="utf-8")
print(f.writable()) #True
f.write('在结尾追加\n');
f.writelines(['在结尾追加2\n','在结尾追加3\n']);
f.close();
# 追加文件--结束
"""输出结果


223333

3333
在结尾追加
在结尾追加2
在结尾追加3
"""

文件处理1

# 文件处理b模式
#读取文件
f=open("test",'rb');# 注意,通过二进制代开文件不用指定编码
data = f.read().decode("utf-8");#但是读取的时候需要指定解码方式
print(data)
f.close()
#写入文件
f=open("test",'wb');# 注意,通过二进制代开文件不用指定编码
f.write("张三\n".encode("utf-8"))
f.close();
#追加文件
f=open("test",'ab');# 注意,通过二进制代开文件不用指定编码
f.write("李四\n".encode("utf-8"))
f.close();

通过二进制处理文件

# 读取文件最后一行
f=open("test",'rb');# 注意,通过二进制代开文件不用指定编码 for i in f:
# 设置一个偏移量,offSet、
offset=-10;
while True:
# 通过seek(偏移量,2);的方式来倒着获取光标位置
f.seek(offset,2)
# 从光标位置开始读取数据
data=f.readlines();
if len(data)>1:
print(data[-1].decode('utf-8'));
break;
offset *=2

读取文件最后一行

with open('test','r',encoding="utf-8") as  a,open('test2','w',encoding="utf-8") as b:
b.write(a.read())

复制文件

二、总结


  1:访问模式

    最基本的操作是读w、写r、追加a。

    b是表示以二进制方式读写,

    + 表示会一个查漏补缺,如果如果是r只读模式,r+就是变成读写模式    

访问模式
  w r a
b wb rb ab
+ w+ r+ a+
b+ wb+ rb+ ab+

  2:注意

    • w模式,会把原来的内容删掉,然后再写入。慎用
    • r+模式,直接写入:文件指针将会放在文件的开头。先读后写:文件指针将会放在文件的末尾。

      with open("r+有坑","w") as f:
      f.write("Hello,IO")
      ##此时文件内容为 Hello,IO # 直接使用r+的写功能
      with open("r+有坑","r+") as f:
      f.write("Hi,r+")
      ##此时文件内容为 Hi,r+,IO #结论一:打开一个文件用于读写。文件指针将会放在文件的开头。 # 先读后写
      with open("r+有坑","r+") as f:
      print(f.read(3)) #Hi,
      f.write("Hi,r+")
      ##此时文件内容为 Hi, r +, IOHi, r +
      # 结论二:如果进行了读取操作,文件指针将会放在文件的末尾

      r+的指针位置

三、练习:文件的修改


                                        古诗几首
作者:李白
题目《将进酒》
题目《早发白帝城》 作者:杜甫
题目《登高》
题目《兵车行》

古诗几首

#基本功能,实现对文件的增删改查
msg="""1:查询,2:新增
3:修改,4:删除"""
#查询功能,根据输入的作者名称,查询该作者的作品
def query(author):
print('查询作者是:\033[1;43m%s\033[0m' %author)
query_data='作者:%s'%author
query_Result=[] #记录查询结果
with open('古诗几首','r',encoding="utf-8") as read_f:
tag=False
for read_line in read_f:
if read_line.strip()==query_data:
tag = True
continue
elif read_line.strip()=="" and tag:
tag = False
break
if tag:
print(read_line,end="")
query_Result.append(read_line)
return query_Result def add():
print("这是新增功能")
def dele():
print("这是删除功能")
#这是修改功能
#格式:修改需要提供一个list集合,包含两块内容\
# data=[{'作者':'李白','内容':'题目《将进酒》'},{'作者':'李白','内容':'题目《静夜思》'}]
#修改之前,先判断文件是否存在
def modify(data):
#把拿到的data数据由字符串转换成列表
data=eval(data)
#拿到作者名称,调用Query方法,返回list集合
article_list=query(data[0]["作者"])
if not article_list :
print('输入的作者不存在')
return "输入的作者不存在"
else:
# 遍历得到的list集合,然后如果看看题目是否存在
currentArticle= " "+data[0]["内容"]+"\n"
if currentArticle not in article_list:
print('输入的作品不存在')
return '输入的作品不存在'
else:
#如果输入的作品存在
with open('古诗几首', 'r', encoding="utf-8") as read_f, \
open('古诗几首_新', 'w', encoding="utf-8") as write_f:
# 遍历文件。如果不是当前行,直接复制,如果是当前行,复制修改后的
for curLine in read_f:
if curLine.strip()!=currentArticle.strip():
write_f.write(curLine)
else:
currentArticlenew=" "+data[1]["内容"]+"\n"
write_f.write(currentArticlenew)
print("修改完成")
dic_oper={'':query,'':add,'':modify,'':dele,}
if __name__=='__main__':
while True:
print(msg)
choice=input('请输入您的选项').strip()
if not choice:continue
if choice=="":break
data=input('请输入您的数据').strip()
dic_oper[choice](data)

文件处理

饮冰三年-人工智能-Python-15Python基础之文件处理的更多相关文章

  1. 饮冰三年-人工智能-Python-21 Python数据库MySql

    一:下载与安装 1:下载地址:https://dev.mysql.com/downloads/mysql/ 2:安装MySql 打开下载文件解压到指定文件目录.(我这里解压目录为D:\MySql\my ...

  2. 饮冰三年-人工智能-Python-17Python基础之模块与包

    一.模块(modue) 简单理解一个.py文件就称之为一个模块. 1.1 模块种类: python标准库 第三方模板 应用程序自定义模块(尽量不要与内置函数重名) 1.2 模块导入方法 # impor ...

  3. 饮冰三年-人工智能-Python-10之C#与Python的对比

    1:注释 C# 中 单行注释:// 多行注释:/**/ python 中 单行注释:# 多行注释:“““内容””” 2:字符串 C#中 "" 用双引号如("我是字符串&q ...

  4. 饮冰三年-人工智能-Python-22 Python初识Django

    1:一个简单的web框架 # 导包 from wsgiref.simple_server import make_server #自定义个处理函数 def application(environ,st ...

  5. 饮冰三年-人工智能-Python-20 Python线程、进程、线程

    进程:最小的数据单元 线程:最小的执行单元 一: 1:线程1 import threading #线程 import time def Music(): print("Listen Musi ...

  6. 饮冰三年-人工智能-Python-19 Python网络编程

    Socket:套接字.作用:我们只需要安照socket的规定去编程,就不需要深入理解tcp/udp协议也可以实现 1:TCP协议 1.1  客户端服务端循环收发消息 # 1:引入stock模块(导包) ...

  7. 饮冰三年-人工智能-Python-16Python基础之迭代器、生成器、装饰器

    一:迭代器: 最大的特点:节省内存 1.1 迭代器协议 a:对象必须提供一个next方法, b:执行方法要么返回迭代中的下一项,要么抛弃一个Stopiteration异常, c:只能向后不能向前. 1 ...

  8. 饮冰三年-人工智能-Python-14Python基础之变量与函数

    1:函数:函数是逻辑结构化和过程化的一种编程方法.函数即变量 #参数组:**字典 *列表 def test(x,*args): print(args); print(args[0]); print(& ...

  9. 饮冰三年-人工智能-Python-13Python基础之运算符与数据类型

    1:算数运算符 + - * / ** % // 2: 成员运算符 in not in name = """张三""" if "张& ...

  10. 饮冰三年-人工智能-linux-08 软件包管理(Python的安装)

    1:软件包存放的位置 media/CentOS_6.9_Final/Packages文件夹下 2.RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. 2.1 常用的命 ...

随机推荐

  1. 2017-2018-2 20165221实验二《Java面向对象程序设计》实验报告

    JAVA实验二报告 课程:Java程序设计 姓名:谭笑 学号:20165221 实验时间:2018.4.13--2018.4.15 实验2--1 实验内容 实现百分制成绩转成"优.良.中.及 ...

  2. Hibernate的学习(二)

    ---恢复内容开始--- 一.多表的建表原则 1.一对多的关系:例如 一个客户有多个联系人: 表与表一对多的关系:在一对多时,多的表中添加一个外键,用来和一的表的主键.产生联系. 2.多对多的关系:例 ...

  3. WPF DataGrid 列显示0,-1(作废、删除)状态,1,2(支出、收入)类型,操作人(在其他表中),如何转换格式。

    操作人,左联,Join on letf //容我补充 状态,类型,类似的转换,在xmlns中引入common   xmlns:com="clr-namespace:XXX.Common&qu ...

  4. pytorch1.0 用torch script导出模型

    python的易上手和pytorch的动态图特性,使得pytorch在学术研究中越来越受欢迎,但在生产环境,碍于python的GIL等特性,可能达不到高并发.低延迟的要求,存在需要用c++接口的情况. ...

  5. python 获取本机IP的三种方式

    python获取本机IP的方式 第一种: #!/usr/bin/python import socket import fcntl import struct def get_ip_address(i ...

  6. Webpack2 中的 NamedModulesPlugin 与 HashedModuleIdsPlugin

    要讨论Webpack 2中新增的这两个plugin的功能,还要先从使用Webpack打包的项目的前端资源缓存方案说起. 通常在使用了Webpack的项目中我们会使用CommonsChunkPlugin ...

  7. hibernate框架学习第三天:对象状态、一级缓存、快照等

    对象的状态 瞬时状态: 瞬时对象(TO) 应用程序创建出来的对象,不受H3控制 注意:TO对象不具有OID,一旦为TO赋值OID,那么此时就不是TO 持久化状态:持久化对象(PO) 受H3控制的对象, ...

  8. 外网zabbix-server使用主动模式监控公司内网windows服务器

    外网zabbix-server使用主动模式监控公司内网windows服务器 1.Zabbix Agent active批量调整客户端为主动模式监控将Template OS Windows模板调整为主动 ...

  9. webStorm 快捷键 + 浏览器

    webStorm 快捷键 shift + enter  不管光标在哪个位置 新建一行 Ctrl + G          查找行Ctrl + B          查找函数Ctrl + D      ...

  10. chrome调试工具怎么限制网速

    在做项目的时候,我们测试的时候有时需要限制网速