python 文件处理

f = open('chenli.txt')            #打开文件
first_line = f.readline()
print('first line:',first_line)     #读一行
print('我是分隔线'.center(50,'-'))
data = f.read()    # 读取剩下的所有内容,文件大时不要用
print(data)         #打印读取内容f.close()           #关闭文件

 

1 文件句柄 = open('文件路径', '模式')

 

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

 

、写程序
a. 文件操作时 with 的作用?
b. 写程序:利用 with 实现同时打开两个文件(一读,一写,并将读取的内容写入到写入模式的文件中)
with open("test","r",encoding="utf8") as a,open("test1","w",encoding="utf8") as b:a1 = a.read()b.write(a1)

 

# 字符串----encode----》bytes
# bytes-----decode---》字符串
f1 = open("test","wb")           # b的方式不能指定编码
f1.write("你好1".encode("utf8"))
f1.close()f2 = open("test","ab")           # b的方式不能指定编码
f2.write("你好2".encode("utf8"))
f2.close()f = open("test","rb")           # b的方式不能指定编码
data = f.read()
print(data.decode("utf8"))
f.close()

 

fo = open("test","r+",encoding="utf8")
print(fo.closed)        #如果文件关闭返回True
print(fo.encoding)      #查看使用open打开文件的编码
fo.flush()              #将文件从内存刷到硬盘上
print(fo.tell())       #查看光标的位置,以字节为单位
fo.seek(15)            #移动光标的位置,以字节为单位
print(fo.tell())
fo.truncate(11)      #保留文件字节的内容,文件要是可写的方式打开,但w 和 w+ 的方式除外

 

fo = open("test","r+",encoding="utf8")
fo.seek(15,0)     #第二个参数,0代表光标从头开始算,1代表光标从上一次开始算,2代表光标从最后开始算
fo.seek(15.1)
fo.seek(15.2)

 

练习:

haproxy.conf 文件

globallog 127.0.0.1 local2daemonmaxconn 256log 127.0.0.1 local2 info
defaultslog globalmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msoption  dontlognulllisten stats :8888stats enablestats uri       /adminstats auth      admin:1234frontend oldboy.orgbind 0.0.0.0:80option httplogoption httpcloseoption  forwardforlog globalacl www hdr_reg(host) -i www.oldboy.orguse_backend www.oldboy.org if wwwbackend www.oldboy1.orgserver 1.1.1.1 1.1.1.1 weight 999 maxconn 333server 11.1.1.1 11.1.1.1 weight 9 maxconn 3server 1.1.1.1 1.1.1.1 weight 9 maxconn 3
backend www.oldboy2.orgserver 3.3.3.3 3.3.3.3 weight 20 maxconn 3000
backend www.oldboy20.orgserver 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
backend www.oldboy11.orgserver 2.2.2.2 2.2.2.2 weight 20 maxconn 3000
backend www.oldboy12.orgserver 2.2.2.2 2.2.2.2 weight 20 maxconn 3000

 

#查看
# 发 www.oldboy1.org #修改
# 发 [{'backend':'www.oldboy1.org','record':{'server':'1.1.1.1','weight':9,'maxconn':3}},{'backend':'www.oldboy1.org','record':{'server':'10.10.10.10','weight':99,'maxconn':33}}]#增加  删除 
# 发 {'backend':'www.oldboy1.org','record':{'server':'1.1.1.1','weight':9,'maxconn':3}}import osdef file_handle(backend_data,res=None, type="fetch"):if type == "fetch":with open("haproxy.conf", "r") as read_f:tag = Falsel = []for r_l in read_f:if r_l.strip() == backend_data:tag = Truecontinueif tag and r_l.startswith("backend"):breakif tag:print("\33[1;45m %s \33[0m" % r_l, end="")l.append(r_l)return lelif type == "apend":with open("haproxy.conf", "r") as read_f, open("haproxy1.conf", "w") as write_f:for r_l in read_f:write_f.write(r_l)for n_l in res:write_f.write(n_l)os.rename("haproxy.conf", "haproxy.conf.bak")os.rename("haproxy1.conf", "haproxy.conf")os.remove("haproxy.conf.bak")elif type == "change":with open("haproxy.conf", "r") as read_f, open("haproxy1.conf", "w") as write_f:tag = Falsehas_write = Falsefor r_l in read_f:if r_l.strip() == backend_data:tag = Truecontinueif tag and r_l.startswith("backend"):tag = Falseif not tag:write_f.write(r_l)else:if not has_write:for n_l in res:write_f.write(n_l)has_write = Trueos.rename("haproxy.conf", "haproxy.conf.bak")os.rename("haproxy1.conf", "haproxy.conf")os.remove("haproxy.conf.bak")def fetch(data):backend_data = "backend %s" %datareturn file_handle(backend_data)def add(data):backend = data["backend"]backend_data = "backend %s" % backendn_r = "%sserver %s %s weight %s maxconn %s\n" % (" " * 8, data["record"]["server"],data["record"]["server"],data["record"]["weight"],data["record"]["maxconn"])res = fetch(backend)if not res:res.append(backend_data)res.append(n_r)file_handle(backend_data,type = "apend")else:res.insert(0,"%s\n"%backend_data)if n_r not in res:res.append(n_r)file_handle(backend_data, res, type="change")def remove(data):backend = data["backend"]backend_data = "backend %s"%backendc_r = "%sserver %s %s weight %s maxconn %s\n"%(" "*8,data["record"]["server"],data["record"]["server"],data["record"]["weight"],data["record"]["maxconn"])res = fetch(backend)if not res or c_r not in res:print("数据不存在")returnelse:res.insert(0,"%s\n"%backend_data)res.remove(c_r)file_handle(backend_data, res, type="change")def change(data):backend = data[0]["backend"]backend_data = "backend %s"%backendold_s_r = "%sserver %s %s weight %s maxconn %s\n"%(" "*8,data[0]["record"]["server"],data[0]["record"]["server"],data[0]["record"]["weight"],data[0]["record"]["maxconn"])new_s_r = "%sserver %s %s weight %s maxconn %s\n" % (" " * 8, data[1]["record"]["server"],data[1]["record"]["server"],data[1]["record"]["weight"],data[1]["record"]["maxconn"])res = fetch(backend)if not res or old_s_r not in res:print("数据不存在")returnelse:index = res.index(old_s_r)res[index] = new_s_rres.insert(0,"%s\n"%backend_data)file_handle(backend_data,res,type="change")if __name__ == "__main__":msg = '''1:查询2:添加3:删除4:修改5:退出'''menu_dic = {'1': fetch,'2': add,'3': remove,'4': change,'5': exit,}while True:print(msg)choice = input("请输入操作:").strip()if not choice or choice not in menu_dic:continueif choice == "5":breakdata = input("请输入数据:").strip()if choice != '1':data=eval(data)menu_dic[choice](data)

 

转载于:https://www.cnblogs.com/liaoboshi/p/6136257.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第五章 MVC之Bundle详解

一、简述 Bundle,英文原意就是捆、收集、归拢。在MVC中的Bundle技术,也就是一个对css和js文件的捆绑压缩的技术。 它的用处: 将多个请求捆绑为一个请求,减少服务器请求数 压缩javascript,css等资源文件,减小…

所给服务器端程序改写为能够同时响应多个客户端连接请求的服务器程序_一文读懂客户端请求是如何到达服务器的...

点击上方“蓝色字体”,选择 “设为星标”关键讯息,D1时间送达!互联网是人类历史上最伟大的发明创造之一,而构成互联网架构的核心在于TCP/IP协议。那么TCP/IP是如何工作的呢,我们先从数据包开始讲起。1、数据包一、HTTP…

消息服务器 推送技术,SSE服务器推送技术

SSE即 server send event 服务器发送事件,在在早期可能会使用ajax向服务器轮询的方式,使浏览器第一时间接受到服务器的消息,但这种频率不好控制,消耗也比较大。但是对于SSE来说,当客户端向服务端发送请求,服…

Contest2162 - 2019-3-28 高一noip基础知识点 测试5 题解版

传送门 T1 单调栈 按照b排序 在家每一个物品时,判断一下a和b的关系 如果s[sta[top]].a>s[i].b,就弹栈 记录所有时候的height,并取最大值 T2 单调栈裸题 单调栈是干什么的?? 单调栈是记录一个数的一侧的第一个比他大…

在package.json里面的script设置环境变量,区分开发及生产环境。注意mac与windows的设置方式不一样...

在package.json里面的script设置环境变量,区分开发及生产环境。 注意mac与windows的设置方式不一样。 "scripts": {"publish-mac": "export NODE_ENVprod&&webpack -p --progress --colors","publish-win": "…

leetcode 978. 最长湍流子数组(动态规划)

978. 最长湍流子数组 当 A 的子数组 A[i], A[i1], …, A[j] 满足下列条件时&#xff0c;我们称其为湍流子数组&#xff1a; 若 i < k < j&#xff0c;当 k 为奇数时&#xff0c; A[k] > A[k1]&#xff0c;且当 k 为偶数时&#xff0c;A[k] < A[k1]&#xff1b; 或 …

人工智能取代工作_人工智能正在取代人们的工作-开发人员是下一个吗?

人工智能取代工作I was recently asked to comment on whether there was any point in becoming a developer right now, because AI might be doing your job very soon.最近有人要求我评论一下现在成为开发人员是否有任何意义&#xff0c;因为AI可能很快就会完成您的工作。 …

python类self_Python类中的self到底是干啥的

Python编写类的时候&#xff0c;每个函数参数第一个参数都是self&#xff0c;一开始我不管它到底是干嘛的&#xff0c;只知道必须要写上。后来对Python渐渐熟悉了一点&#xff0c;再回头看self的概念&#xff0c;似乎有点弄明白了。首先明确的是self只有在类的方法中才会有&…

PHP中关于取模运算及符号

执行程序段<?php echo 8%(-2) ?>&#xff0c;输出结果是&#xff1a; %为取模运算&#xff0c;以上程序将输出0 $a%$b,其结果的正负取决于$a的符号。 echo ((-8)%3); //将输出-2 echo (8%(-3)); //将输出2转载于:https://www.cnblogs.com/457248499-qq-com/p…

[pytorch] Pytorch入门

Pytorch入门 简单容易上手&#xff0c;感觉比keras好理解多了&#xff0c;和mxnet很像&#xff08;似乎mxnet有点借鉴pytorch&#xff09;&#xff0c;记一记。 直接从例子开始学&#xff0c;基础知识咱已经看了很多论文了。。。 import torch import torch.nn as nn import to…

无线服务器密码让别人改了,wifi密码被改了怎么办_wifi密码被别人改了怎么办?-192路由网...

wifi密码被别人改了怎么办&#xff1f;wifi密码之所以被别人修改&#xff0c;是因为其他人知道了你路由器的登录密码。所以&#xff0c;如果发现自己wifi密码被别人修改了&#xff0c;应该立刻登录到路由器设置界面&#xff0c;修改路由器登录密码、修改wifi密码、并调整wifi加…

[archlinux][hardware] 查看SSD的使用寿命

因为最近把16GB的SSD做成了HDD的cache&#xff0c;所以比较关系寿命问题。 使用smartctl工具。 参考&#xff1a;https://www.v2ex.com/t/261373 linux 下面只有 smartmontools 这一个工具&#xff0c;而且只对像三丧和 intel 这样的大厂支持良好&#xff0c;其余的厂家文档不全…

leetcode174. 地下城游戏(动态规划)

一些恶魔抓住了公主&#xff08;P&#xff09;并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士&#xff08;K&#xff09;最初被安置在左上角的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正…

如何设置Windows版Go —快速简便的指南

by Linda Gregier琳达格雷格(Linda Gregier) Another great language to add to your full-stack developer tool belt is the simple and productive general-purpose programming language of Go.添加到您的全栈开发人员工具带中的另一种很棒的语言是Go的简单而高效的通用编…

python计算现场得分_浅谈用 Python 计算文本 BLEU 分数

浅谈用 Python 计算文本 BLEU 分数BLEU, 全称为 Bilingual Evaluation Understudy(双语评估替换), 是一个比较候选文本翻译与其他一个或多个参考翻译的评价分数尽管 BLEU 一开始是为翻译工作而开发, 但它也可以被用于评估文本的质量, 这种文本是为一套自然语言处理任务而生成的…

Unity的几个特殊文件夹

1.以.开头的文件夹会被unity忽略&#xff0c;资源不会被导入&#xff0c;脚本不会编译。 2.Standard Assets和Pro Standard Assets&#xff1a;在这个文件夹中的脚本最先被编译。 3.Editor&#xff1a;以Editor命名的文件夹允许其中的脚本访问Unity Editor的API。如果脚本中使用…

怎么上传文件到kk服务器,VS Code 关于SFTP上传文件到多服务器的配置

工欲善其事&#xff0c;必先利其器&#xff01;刚学前端的时候一直用的DW来编写代码&#xff0c;其功能非常强大&#xff0c;但在Linux下不能用&#xff0c;所以就转VS Code了。但是刚开始使用VS Code的时候&#xff0c;很多DW上的功能需要自己安装扩展&#xff0c;并配置才可以…

CentOS7 Firewall NAT 及端口映射

本节介绍用CentOS7的Firewalll来做NAT以及端口映射实验拓扑:因为我的环境里CentOS7上有KVM虚拟机需要共享网卡上网&#xff0c;所以我把网卡都添加到了桥里面&#xff0c;当然这里也可以不用桥&#xff0c;直接用物理网口&#xff1b;用nmcli创建桥&#xff0c;并添加网口到桥&…

JVM源码---教你傻瓜式编译openjdk7(JAVA虚拟机爱好者必看)

LZ经过一个星期断断续续的研究&#xff0c;终于成功的搞定了JDK的成功编译与调试。尽管网络上的教程也有不少&#xff0c;包括源码中也有自带的编译步骤说明&#xff0c;但真正自己动手的话&#xff0c;还是会遇到不少意料之外的错误。 为了方便各位猿友编译&#xff0c;LZ临时…

leetcode1105. 填充书架(动态规划)

附近的家居城促销&#xff0c;你买回了一直心仪的可调节书架&#xff0c;打算把自己的书都整理到新的书架上。 你把要摆放的书 books 都整理好&#xff0c;叠成一摞&#xff1a;从上往下&#xff0c;第 i 本书的厚度为 books[i][0]&#xff0c;高度为 books[i][1]。 按顺序 将…