二月二二16日计算

不存在则创建,不存在则创建,2.文件的读取,1.文件的打开,文件操作是在内存中进行操作的,操作文件时,打开文件或新建一个文件,2打开文件/创建新文件

open(filename,model,encode)

一.文件基本操作

  一.文本的打开

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

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

二.文书的读取

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

  三.开发文件的方式有:  

  • 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+ 可写,可读,只好扩充在文件尾部

伍.文本之中支持操作:

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'
8
0
'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()  跳转到有个别地点

   
文件操作是在内部存款和储蓄器中开始展览操作的,因为文件是积存在内部存款和储蓄器中的.

5月25日

f=open(‘log.txt’)

二.管住上下文

为了幸免打开文件后忘记关闭,能够经过管制上下文

 

with open("log", 'r+') as f:
    data = f.read()
    print(data)

三.练习  

编写制定脚本完结,用户登6,注册,改密,删除功用

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#删除用户,修改密码
def login(username, password):
    """
    用户登录验证
    :param username: 用户名
    :param password: 密码
    :return: True成功,False失败
    """
    f = open('log', 'r', encoding='utf-8')
    for line in f:
        line = line.strip()
        userlist = line.split('$')
        if username == userlist[0] and password == userlist[1]:
            return True
    return False

def user_ex(username):
    """
    用于检测用户是否存在
    :param username: 用户名
    :return: True 表示存在,False用户不存在
    """
    with open('log','r',encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            userlist = line.split('$')
            if username in userlist:
                return True
    return False

def res(username, password):
    """
    用于用户注册
    :param username: 用户名
    :param password: 密码
    :return: True注册成功
    """
    with open('log','a',encoding='utf-8') as f:
        temp = "\n" + username + "$" + password
        f.write(temp)
    return True

def change_pwd(username, password):
    """
    用户修改密码
    :param username: 用户名
    :param password: 修改后的密码
    :return: True修改成功,False修改失败
    """
    file_object = open('log')
    try:
        lines=open('log','r').readlines()
        for i in range(len(lines)):
            if username in lines[i]:
                test=lines[i].split('$')[1]
                lines[i]=lines[i].replace(test,password)
                open('log','w').writelines(lines)
                return True
        return False
    finally:
        file_object.close( )

def del_user(username):
    """
    删除用户
    :param username: 要删除用户名
    :return: true 删除成功,False用户名不在列表中
    """
    file_object = open('log')
    try:
        lines = open('log', 'r').readlines()
        for i in range(len(lines)):
            if username in lines[i]:
                del lines[i]
                print(lines)
                open('log','w').writelines(lines)
                return True
            else:
                return False
    finally:
        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




def main():
    inp = input("1:登录;2:注册;3:删除用户;4:修改密码")
    user = input("请输入用户名:")
    pwd = input("请输入密码:")
    if inp == "1":
        ret = login(user, pwd)
        if ret:
            print("登录成功")
        else:
            print("登录失败")
    elif inp == "2":
        is_ex = user_ex(user)
        if is_ex:
            print("用户已存在,无法注册")
        else:
            resgister = res(user, pwd)
            if resgister:
                print("用户已成功注册")
            else:
                print("注册失败")
    elif inp == "3":
        del_us = del_user(user)
        if del_us:
            print("已删除")
        else:
            print("无此用户")
    elif inp == "4":
        is_chage = change_pwd(user, pwd)
        if is_chage:
            print("修改成功")
        else:
            print("无此用户")

main()

    open函数,该函数用于文书管理:


data=f.read()

 二.haproxy配备文件更动操作

需求:

  1.相称值 ,并将相配到的故事情节以列表方式再次来到给用户

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

图片 1图片 2

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

布局文件

图片 3图片 4

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


def fetch(backend):
    result = []
    with open('ha.conf', 'r') as f:
        flag = False
        for line in f:
            if line.strip().startswith('backend') and line.strip() == "backend " + backend:
                flag = True
                continue
            if flag and line.strip().startswith('backend'):
                break
            if flag and line.strip():
                result.append(line.strip())

    return result


def add(backend, record):
    result = fetch(backend)
    if not result:
        # 无backend,无record
        pass
    else:
        # 有backend
        if record in result:
            # 记录record
            pass
        else:
            result.append(record)
            with open('ha.conf', 'r') as old, open('new.conf', 'w') as new:
                continue_flag = False
                for line in old:

                    if line.strip().startswith('backend') and line.strip() == "backend " + backend:
                        continue_flag = True
                        new.write(line)
                        for temp in result:
                            new.write(" "*8 + temp + "\n")
                        continue

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

                    if continue_flag:
                        pass
                    else:
                        new.write(line)


def add2(backend, record):
    with open('ha.conf', 'r') as old, open('new.conf', 'w') as new:
        in_backend = False
        has_backend = False
        has_record = False
        for line in old:
            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 not has_record:
                    new.write(" "*8 + record + '\n')
                new.write(line)
                in_backend = False
                continue

            if in_backend and line.strip() == record:
                has_record = True
                new.write(line)
                continue

            if line.strip():
                new.write(line)

        if not has_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')

  

   
操作文件时,一般供给经验如下步骤:

一文书的开辟与关闭

f.close()

   
(一)张开文件;

在linux系统中

print(data)

   
(二)操作文件

开发文件或新建3个文书

read(num):若为普通打开药格局,num为读取内定数量字符的个数

   
一、展开文件

读/写数据

模式:

    文件句柄 =
open(“文件路径”,”情势”)

关门文件

r:只读形式

   
打开文件时,须求钦点文件路径和以何等措施张开文件,张开后,就能够获得该公文句柄,日后经过此文件句柄对该文件操作。

2张开文件/创建新文件

w:只写方式,不设有则成立,存在则清空

   
展开文件的格局有:

f=open(‘test.txt’,’w’)

x:只写情势,不存在则开创,存在则报错

   
(一)r,只读方式(私下认可);

r只读形式,指针在文书的始发

a:追加方式,不存在则开创,存在则扩展内容

   
(二)w,只写格局。【不可读;不存在则开创;存在则删除内容;】

w只写格局,若存在,覆盖,若不存在,成立新文件

以字节形式张开:

   
(3)a,追加格局。【可读;   不设有则创设;存在则只增添内容;】

a用于从追加,指针放文件结尾,新剧情扩大到文件后,
若文件不存在,创设新文件写入

f=open(“log.txt”,”r”,encoding=”utf-捌”),读取二进制的多少,以
encoding的编码格局调换来字符串

    “+”
表示能够而且读写有些文件

rb以贰进制格式张开。。。

f=open(“log.txt”,”rb”)

   
(一)r+,可读写文件。【可读;可写;可扩充】;

wb以2进制格式展开。。。

平时格局张开时,python内部自行将字节数据调换到字符串了

   
(2)w+,写读;

ab以2进制格式展开。。。

写数据

    (3)a+,同a

r+打开三个文本实行读写,指针在起先

f=open(“log.txt”,”wb”)

   
“U”表示在读取时,能够将 \r \n \r\n自动转换到 \n (与 r 或 r+
形式同使用)

w+张开三个文本举办读写,若存在,将其遮住,不设有,创建新文件

f.write(bytes(“姓名”,encoding=”utf-八”)):手动进行调换来字节

    (1)ru

a+展开一个文书用于读写,若文件存在,指针放文件末尾,若不设有,创立新文件用于读写

f.close()

    (2)r+u

rb+以二进制格式展开叁个文本用于读写。。。。

 

   
“b”表示管理贰进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows管理2进制文件时需标注)

wb+以贰进制格式张开2个文书用于读写。。。。