文件操作分分快三计划

作者:编程技术

              主动seek,写从当前指针向后写

一.文件基本操作

  1.文件的打开

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

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

``

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,worldnaaaaaaa'

 

"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'
8
0
'helllontest'

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.def read(self, *args, **kwargs):

f=open("log.txt","r",encoding="utf-8"),读取二进制的数据,以 encoding的编码方式转换成字符串

 2.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')

  

    """

readlines:将每一行元素都读取返回为一个列表

二.管理上下文

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

 

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

三.练习  

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

#!/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()

    pass   

判断是否可读:readable()

    (1)打开文件;

“ ”表示可以同时读写某个文件:r ,w ,x ,a

    10.def tell(self, *args, **kwargs):

截取数据:truncate(),截取从指针往前的所有数据

    耿ad56465645

f.close()

    12.def writable(self, *args, **kwargs):

以字节方式打开:

     # real signature unknown 仅读取一行数据

  读,从0开始读取

    pass

 

  4.def isatty(self, *args, **kwargs):

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

    (2)操作文件

f=open("ha.log",'r',encodeing="utf-8")
for line in f:
    print(line)

    pass

read(num):若为普通打开方式,num为读取指定数目字符的个数

    一、打开文件

x:只写模式,不存在则创建,存在则报错

    运行结果如下:

tell():返回文件指针的位置

    耿ad56465645
  长123666
  张dadaebdadojou

with open("log.txt") as f:
    f.read()

    seek()是按指针放置文件读取的位置,按照字节进行放置。tell()看文件读取到那里。

w:只写模式,不存在则创建,存在则清空

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

写数据

    pass

避免显示关闭文件的用法

    # real signature unknown 是否可写

r :

    f = open("file","r",encoding="utf-8")
    ret = f.readline()
    print(ret)
    f.close()
    readline()是读取文件的第一行,仅读取文件的第一行,并且形成一个字符串。

f.write(bytes("姓名",encoding="utf-8")):手动进行转换成字节

     # real signature unknown 判断文件是否是同意tty设备

r:只读模式

    操作文件时,一般需要经历如下步骤:

仅读取一行数据:readline()

    打开一个文件,read()是按照字符来进行读取的。读取文件的信息,每次读取多少字符。

刷新函数:flush()

    1.def close(self, *args, **kwargs):

f=open("log.txt","rb")

    3.def flush(self, *args, **kwargs):

seek():移动文件指针的位置

    9.def seekable(self, *args, **kwargs):

x :如果文件存在,则报错

    运行结果如下:

python2.7之后,with关键字支持同时打开两个文件

    (3)a ,同a

              如果不读便开始写,从最开始插入数据,如果有数据,则覆盖

     读取所有数据,并根据换行保存值列表 """

a:追加模式,不存在则创建,存在则追加内容

    pass

普通方式打开时,python内部自动将字节数据转换成字符串了

    (1)r ,可读写文件。【可读;可写;可追加】;

       写,先读,最后追加

    11.def truncate(self, *args, **kwargs):

 

    pass

with open("log1.txt") as f1,open("log2.txt") as f2:    
    f1.read()
    f2.read()

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

文件操作的应用:系统登录时读取相关文件进行用户名和密码的校验

    f = open("file","r",encoding="utf-8")
    #f.write("耿ad56465645")
    print(f.read(2))
    f.close()

data=f.read()

    # real signature unknown 指针是否可操作

line.strip():默认可以将换行符也去掉

    pass

print(data)

    "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

f=open('log.txt')

    13.def write(self, *args, **kwargs):

open(filename,model,encode)

    打开文件的模式有:

按行循环读取数据:

    "U"表示在读取时,可以将 r n rn自动转换成 n (与 r 或 r 模式同使用)

a :追加,只在最后追加,seek()对于写不管用

    # real signature unknown

w :先清空,在写的之后,就可以读了,使用seek(0),将指针移动到原点

    # real signature unknown 关闭文件

模式:

    (2)w,只写模式。【不可读;不存在则创建;存在则删除内容;】

f.close()

     # real signature unknown 文件描述符

       write()和read()各自维护各自内部的指针

    pass

    (1)r,只读模式(默认);

  """

    6.def readable(self, *args, **kwargs):

    7.def readline(self, *args, **kwargs):

    耿a

    pass

    # real signature unknown 截断数据,仅保留指定之前数据

    文件操作是在内存中进行操作的,因为文件是存储在内存中的.

    # real signature unknown

    pass

    8.def seek(self, *args, **kwargs):

    pass

    写内容

    pass

    (2)r u

    (1)rb      (2)wb         (3)ab

    2.def fileno(self, *args, **kwargs):

    与tell()经常一起使用,放置文件指针,告诉文件从哪里进行读取。

    open函数,该函数用于文件处理:

    二、操作

    # real signature unknown 指定文件中指针位置

    # real signature unknown 刷新文件内部缓冲区

    # real signature unknown 读取指定字符的数据

    (1)ru

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

    (2)w ,写读;

    # real signature unknown 是否可读

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

    f = open("file","r",encoding="utf-8")
    f.seek(3)
    print(f.read(3))
    #print(f.tell())
    f.close()

    我们知道,打开文件之后,我们使用seek()放置指针位置,read()读取指针后面的内容,而truncate()是截取指针之前的文件内容。

    获取指针位置

    14.def readlines(self, size=None): # real signature unknown; restored from __doc__

    pass   

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 python python一步一步