• Python学习(十一)文件指针,文件操作练习,修改文件


    1、文件指针

    文件指针用来记录文件到底读到哪里

    追加模式默认指针是在末尾

    1)写入内容后,移动指针到文件最前面,并读出文件

    f=open('test刘佳','a+',encoding='utf-8')#a模式默认指针是在末尾的
    f.write('测试我写的')
    f.seek(0) #移动文件指针到最前面
    print(f.read())

    输出内容为整个文件的内容

    2)写入内容,移动指针到最前面,再写入内容

    f=open('test刘佳','a+',encoding='utf-8')#a模式默认指针是在末尾的
    f.write('测试我写的')
    f.seek(0) #移动文件指针到最前面
    f.write('来来来') #移动完文件指针,写的时候还是在文件末尾写

    所以此时若查看文件发现,第二次写入的是在最末尾

    2、练习1

    练习之前先要懂以下两个知识点:

    random函数:

    print(random.randint(1,1000)) 生成1-1000以内的随机数
    print('1'.zfill(4))   针对字符串,不够4位就补0

    要求:随机产生一些手机号,写到文件里面

    import random
    f=open('phone.txt','w') num=input('请输入你要产生的手机号个数:') for i in range(int(num)): start='1861235' random_num=str(random.randint(1,9999)) new_num=random_num.zfill(4) phone_num= start+new_num f.write(phone_num+' ') f.close() f=open(r'C:UsersacerDesktopstus.txt',encoding='utf-8') print(f.read())

    手机号以1861235开头,后四位由随机数生成,生成的随机数不够4位的以0补齐。这个手机号是开头部分加上随机数,并将该结果写入文件中,再读出来

    3、练习2

    需求:监控日志,如果有攻击,就把IP加入黑名单
    分析:1、打开日志文件 2、把IP地址拿出来 3、判断每一个IP出现的次数
    直接循环一个文件对象,每次循环的是文件的每一行
    import time
    point=0 #记录文件指针的位置
    while True:
        all_ips = []
        f = open('access.log', encoding='utf-8')
        f.seek(point)  #移动文件指针
        for line in f:  # 每次取一行
            ip = line.split()[0]
            all_ips.append(ip)
        point=f.tell()  # 记录文件指针的位置
        all_ip_set = set(all_ips)
        # print(all_ip_set)
        for ip in all_ip_set:
            if all_ips.count(ip) > 50:
                print('应该加入黑名单的ip是%s'%ip)
        f.close()
        time.sleep(60) #暂停60秒

    因为该文件中I出现,IP地址是在每行一开始的位置,所以循环文件,每次一行,并把每一行第一个字符串放到一个列表里,并对已经循环到的位置做标记,下次循环就从标记位置开始,避免每次都从头来。

    4、自动关闭文件

    with open('access.log','r+',encoding='utf-8') as f:
        for line in f:
            print(line)

     5、文件强制写入

    fw= open('username','w')
    fw.write('hh')
    fw.flush()#强制把缓冲区里面的数据写到磁盘上

    6、修改文件

    能直接修改文件中的内容,只能先把文件中内容读出来,修改后,将原本文件内容删除,然后将修改后的内容写进去

    1)修改方式一

    打开文件获取到所有内容,对内容进行修改,清空原来的文件内容,把新的文件内容写进去

    将文件中的某字符串改为另外的字符串:

    f=open('username','a+',encoding='utf-8')
    f.seek(0)
    all_str=f.read()
    new_str=all_str.replace('123456','78910') #把文件里的123456改为78910
    f.seek(0)
    f.truncate()#清空文件内容
    f.write(new_str)
    f.close()

    在文件每行前面加上一个字符串str_:

    f=open('username','a+',encoding='utf-8')
    f.seek(0)
    all_line=''
    for line in f:  #循环文件每一行
        new_line='str_'+line   #每一行的最前面加上字符串'str'
        all_line=all_line+new_line
    f.seek(0)
    f.truncate()
    f.write(all_line)
    f.close()

    2)修改方式二

    a文件 a.txt
    写一行写到b文件 a.txt.bak
    删掉a文件,b文件名字改为a文件名

    import os
    with open('words',encoding='utf-8') as fr, open('.words.bak','w',encoding='utf-8') as fw:
        for line in fr:
            new_line=line.replace('','flower')
            fw.write(new_line)
    os.remove('words')
    os.rename('.words.bak','words')

    原文档读,定义一个新文档写,循环每一行,将原文档里面的‘花’替换为‘flower’,并写入新文档,删除原文档,并将新文档改名为原文档

     

     
  • 相关阅读:
    Java并发编程:volatile关键字解析(转)
    Java并发编程 Synchronized及其实现原理
    (a++)+(++a)=?
    Java集合中那些类是线程安全的
    Servlet 与 CGI 的比较
    JAVA中常见的锁以及其特性
    总结一下hashMap和hashtable方面的知识点
    Which statement is true?
    下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
    Kafka 详解(转)
  • 原文地址:https://www.cnblogs.com/emilyliu/p/8781165.html
Copyright © 2020-2023  润新知