python如何处理inp文件_python 之文件操作

本文详细介绍了Python中的文件操作,包括文件的打开、读取、写入、追加等模式,如'r', 'w', 'a', '+', 'b'等。还展示了使用'r+', 'w+', 'x+', 'a+'模式的区别,并提供了read(), write(), readline(), readlines()等函数的用法。此外,文章还提到了文件的上下文管理,确保文件正确关闭,并给出了用户登录、注册、改密和删除功能的简单实现代码。最后,文章讲解了haproxy配置文件的修改操作和号码段截取的代码示例。" 120488166,11339261, LaTeX入门:打造专业毕业论文,"['latex', '论文写作', '排版工具', '在线编辑器', '学术资源']
摘要由CSDN通过智能技术生成

一.文件基本操作

1.文件的打开

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

2.文件的读取

>>> f = open("f:/test.txt", "r")>>>f.read()'hello,world'

>>> f.close

3.打开文件的模式有:

r ,只读模式【默认】

w,只写模式【不可读;不存在则创建;存在则清空内容;】

x, 只写模式【不可读;不存在则创建,存在则报错】

a, 追加模式【可读;   不存在则创建;存在则只追加内容;】

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

r+, 读写【可读,可写】

w+,写读【可读,可写】

x+ ,写读【可读,可写】

a+, 写读【可读,可写】

>>> f = open("f:/test.txt", 'r+')>>>f.read()'heheo,world~~'

>>> f.write("\naaaaaaa")8

>>>f.tell()22

>>>f.read()''

>>>f.tell()22

>>>f.seek(0)

0>>>f.read()'heheo,world~~\naaaaaaa'

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

rb  或 r+b

wb 或 w+b

xb 或 w+b

ab 或 a+b

#以二进制文件写

f = open("file.txt", "wb")

str_data= "呵呵"bytes_data= bytes(str_data, encoding='utf-8')

f.write(bytes_data)

f.close()

#以二进制文件读

f = open("file.txt",'rb')

data=f.read()

f.close()print(data)

str_data= str(data,encoding="utf-8")print(str_data)

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

4. r+, w+, x+, a+ 区别

r+ 可读,可写,若文件不存在会报错,根据指针位置可写随意位置

w+ 可写,可读,若文件不存在会创建,在进行写操作会清空文件内容

x+ 可写,可读,若文件存在会报错,不存在则创建

a+ 可写,可读,只能追加在文件尾部

5.文件内部支持操作:

readline()   逐行读取数据

#逐行去读,较省内存

f = open('log','r')

result=list()for line in open('log'):

line=f.readline()print(line)

result.append(line)print(result)

f.close()

trancate(),从文件的首行首字符开始截断,截断文件为n个字符;无n表示从当前位置起截断;截断之后n后面的所有字符被删除

>>> with open("f:/test.txt" , 'r+') as f:

... f.seek(2)

... f.truncate(3)

...2

3

>>> with open("f:/test.txt" , 'r+') as f:

... f.read()

...'hel'

read(),读取文件内容

>>> with open("f:/test.txt" , 'r+') as f:

... f.read()

...'hel'

write(),写入内容

>>> with open("f:/test.txt" , 'r+') as f:

... f.read()

... f.write('llo' + '\n' + 'test')

... f.seek(0)

... f.read()

...'hel'

80'helllo\ntest'

readlines(), 将文件内容以列表的形式存放,---->[“第一行”, "第二行"]

>>> with open("f:/test.txt" , 'r+') as f:

... temp=f.readlines()

...print(temp)

...

['heheo,world~~\n', 'aaaaaaa']

open(),打开文件

>>> f = open('f:/test.txt', 'r')

close(),关闭文件

f.close()

flush(),强行刷入硬盘

tell()  获取指针位置

seek()  跳转到某个位置

二.管理上下文

为了避免打开文件后忘记关闭,可以通过管理上下文

with open("log", 'r+') as f:

data=f.read()print(data)

三.练习

编写脚本实现 ,用户登录,注册,改密,删除功能

#!/usr/bin/env python#-*- coding:utf-8 -*-#删除用户,修改密码

deflogin(username, password):"""用户登录验证

:param username: 用户名

:param password: 密码

:return: True成功,False失败"""f= open('log', 'r', encoding='utf-8')for line inf:

line=line.strip()

userlist= line.split('$')if username == userlist[0] and password == userlist[1]:returnTruereturnFalsedefuser_ex(username):"""用于检测用户是否存在

:param username: 用户名

:return: True 表示存在,False用户不存在"""with open('log','r',encoding='utf-8') as f:for line inf:

line=line.strip()

userlist= line.split('$')if username inuserlist:returnTruereturnFalsedefres(username, password):"""用于用户注册

:param username: 用户名

:param password: 密码

:return: True注册成功"""with open('log','a',encoding='utf-8') as f:

temp= "\n" + username + "$" +password

f.write(temp)returnTruedefchange_pwd(username, password):"""用户修改密码

:param username: 用户名

:param password: 修改后的密码

:return: True修改成功,False修改失败"""file_object= open('log')try:

lines=open('log','r').readlines()for i inrange(len(lines)):if username inlines[i]:

test=lines[i].split('$')[1]

lines[i]=lines[i].replace(test,password)

open('log','w').writelines(lines)returnTruereturnFalsefinally:

file_object.close( )defdel_user(username):"""删除用户

:param username: 要删除用户名

:return: true 删除成功,False用户名不在列表中"""file_object= open('log')try:

lines= open('log', 'r').readlines()for i inrange(len(lines)):if username inlines[i]:dellines[i]print(lines)

open('log','w').writelines(lines)returnTrueelse:returnFalsefinally:

file_object.close()#def del_user(username):#with open('log', 'r') as f:#for line in f:#if re.match("lisi", line):#pass#else:#data = line#with open('log', 'w+') as f:#f.write(data)#return True#return False

defmain():

inp= input("1:登录;2:注册;3:删除用户;4:修改密码")

user= input("请输入用户名:")

pwd= input("请输入密码:")if inp == "1":

ret=login(user, pwd)ifret:print("登录成功")else:print("登录失败")elif inp == "2":

is_ex=user_ex(user)ifis_ex:print("用户已存在,无法注册")else:

resgister=res(user, pwd)ifresgister:print("用户已成功注册")else:print("注册失败")elif inp == "3":

del_us=del_user(user)ifdel_us:print("已删除")else:print("无此用户")elif inp == "4":

is_chage=change_pwd(user, pwd)ifis_chage:print("修改成功")else:print("无此用户")

main()

2.haproxy配置文件更改操作

需求:

1.匹配值 ,并将匹配到的内容以列表形式返回给用户

2.插入内容,用户input数据后,将数据更新至配置文件中

global

log 127.0.0.1 local2

daemon

maxconn 256

log 127.0.0.1 local2 info

defaults

log global

mode http

timeout connect 5000ms

timeout client 50000ms

timeout server 50000ms

option dontlognull

listen stats :8888

stats enable

stats uri /admin

stats auth admin:1234

frontend oldboy.org

bind 0.0.0.0:80

option httplog

option httpclose

option forwardfor

log global

acl www hdr_reg(host) -i www.oldboy.org

use_backend www.oldboy.org if www

backend www.oldboy.org

server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000

backend buy.oldboy.org

server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000

配置文件

#!/usr/bin/env python#-*- coding:utf-8 -*-

deffetch(backend):

result=[]

with open('ha.conf', 'r') as f:

flag=Falsefor line inf:if line.strip().startswith('backend') and line.strip() == "backend" +backend:

flag=Truecontinue

if flag and line.strip().startswith('backend'):break

if flag andline.strip():

result.append(line.strip())returnresultdefadd(backend, record):

result=fetch(backend)if notresult:#无backend,无record

pass

else:#有backend

if record inresult:#记录record

pass

else:

result.append(record)

with open('ha.conf', 'r') as old, open('new.conf', 'w') as new:

continue_flag=Falsefor line inold:if line.strip().startswith('backend') and line.strip() == "backend" +backend:

continue_flag=True

new.write(line)for temp inresult:

new.write(" "*8 + temp + "\n")continue

if continue_flag and line.strip().startswith('backend'):

continue_flag=Falseifcontinue_flag:pass

else:

new.write(line)defadd2(backend, record):

with open('ha.conf', 'r') as old, open('new.conf', 'w') as new:

in_backend=False

has_backend=False

has_record=Falsefor line inold:if line.strip().startswith('backend') and line.strip() == "backend" +backend:

has_backend=True

in_backend=True

new.write(line)continue

if in_backend and line.strip().startswith('backend'):if nothas_record:

new.write(" "*8 + record + '\n')

new.write(line)

in_backend=Falsecontinue

if in_backend and line.strip() ==record:

has_record=True

new.write(line)continue

ifline.strip():

new.write(line)if nothas_backend:#写backend,写record

new.write('backend'+ backend + '\n')

new.write(' '*8 + record + '\n')#ret = fetch("www.oldboy.org")#print(ret)

#add('www.oldboy.org', "server 100.1.7.10 100.1.7.10 weight 20 maxconn 3000")#add2('www.oldboy.org', "server 100.1.7.11 100.1.7.11 weight 20 maxconn 3000")

View Code

3. 号码段截取

需求:

将文件中的第二列前三字节和后四字节以逗号分开,文件格式如下:

1,"1300000","山东","济南","中国联通","0531","250000"

2,"1300001","江苏","常州","中国联通","0519","213000"

3,"1300002","安徽","巢湖","中国联通","0565","238000"

4,"1300003","四川","宜宾","中国联通","0831","644000"

5,"1300004","四川","自贡","中国联通","0813","643000"

需求目标:

1,"130","0000","山东","济南","中国联通","0531","250000"

代码实现:

def phone():

with open("mobile", "w+") as nf, open("Mobile.txt", "r") as f:

for row in f:

row = row.strip().split(',')

row = (row[:1] + [row[1][:4]+'"', '"' + row[1][4:]] + row[2:])

nf.write(str(row).strip('[]').replace('" ', "")+'\n')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值