1、打开文件的模式

 r,只读模式(默认)【不可写;文件不存在,会报错】
w,只写模式【不可读;不存在则创建;存在则删除内容】
a,追加模式【不可读;不存在则创建;存在则追加内容】
r+,读写模式【可读、可写、可追加,如果打开的文件不存在的话,会报错】
w+,写读模式【使用w+的话,已经存在的文件内容会被清空,可以读到已经写的文件内容】
a+,追加读写模式【不存在则创建;存在则只追加内容;】

2、文件基本操作

 # 打开文件(python默认字符集为utf-8,windows为gbk,所以要指定encoding='utf-8'),不输入模式默认为r模式
m = open('words',encoding='utf-8')
print(m.read()) # 读文件
print(m.readline()) # 读取第一行
print(m.readlines()) # 把文件的每一行放到一个list里面

3、文件操作方法

 f = open('words','r+',encoding='utf-8')  # encoding参数可以指定文件的编码
f.readline() # 读一行
f.readable() # 判断文件是否可读
f.writable() # 判断文件是否可写
f.encoding # 打印文件的编码
f.read() # 读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
f.readlines() # 读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,原因和上面一样
f.tell() # 获取当前文件的指针指向
f.seek(0) # 把当前文件指针指向哪
f.write('爱情证书') # 写入内容
f.flush() # 写入文件后,立即从内存中把数据写到磁盘中
f.truncate() # 清空文件内容
f.writelines(['爱情证书','孙燕姿']) # 将一个列表写入文件中
f.close() # 关闭文件

4、大文件读取高效操作方法

用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了,如下:

 # 这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存
f = open('words',encoding='utf-8')
for line in f:
print(line)

5、文件指针

 # 用来记录文件读到哪里
# a模式的文件指针是在末尾的
m = open('name','a+',encoding='utf-8')
m.write('呃呃呃')
m.seek(0) # 移动文件指针到最前面
print(m.read())
m.write('呵呵呵') # 移动完文件指针之后,从前面开始读,但写的时候还是在文件末尾写
m.seek(0)
print(m.read())

6、自动关闭文件

在操作文件的时候,经常会忘了关闭文件。可以使用with,它会在使用完这个文件句柄之后,自动关闭该文件,使用方式如下:

 # 打开一个文件,把这个文件的句柄付给f
with open('file.txt', 'r') as f:
for line in f:
print(line) # 这是多文件的操作,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
with open('file.txt') as fr,open('file_bak', 'w') as fw:
for line in fr: # 循环file.txt中的每一行
fw.write(line) # 写到file_bak文件中

7、修改文件

修改文件有两种方式:

  • 一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容
  • 第二种是把修改后的文件内容写到一个新的文件中

第一种方式:

 with open('words','r+',encoding='utf-8') as fr:
res = fr.read() # 读出文件中的全部内容
new_res = res.replace('花','flower') # 将'花'替换成'flower'
fr.seek(0) # 将文件指针指向文件最开头
fr.truncate() # 清空文件
fr.write(new_res) # 将替换后的内容写入文件

第二种方式:

 # 这个是多文件的操作,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
import os
with open('file') as fr,open('new_file','w') as fw:
for line in fr: # 循环file.txt中的每一行
new_line = line.replace('花','flower')
fw.write(new_line) # 写到file_bak文件中
os.remove('file') # 删除文件
os.rename('new_file','file') # 改名

8、f.write()和f.writelines()

 # f.write()只能写字符串
a = ['abc\n','123\n','!@#']
f = open('name','w')
for i in a:
f.write(i) # f.writelines()会循环把list当中的元素写入文件
a = ['abc\n','123\n','!@#']
f = open('name','w')
f.writelines(a)

9、练习

(1)随机产生手机号,输入多少个就产生多少个

import random
start_num = ''
f = open('test.txt','w',encoding='utf-8')
num = input('请输入要产生的手机号个数:')
for i in range(int(num)):
random_num = str(random.randint(1,9999)) # 随机产生一个1-9999的数字
new_num = random_num.zfill(4) # 不够四位,前面补0
phone_num = start_num + new_num
f.write(phone_num + '\n')
f.close()

(2)监控日志,一分钟读一次日志文件,如果一分钟之内访问博客的IP地址超过50次,就把这个IP记录下加入黑名单

 # 分析:
#打开日志文件
#把ip地址拿出来
#判断每一个ip出现的次数,如果大于50次,记录下来,加入黑名单
#每分钟读一次
import time
point = 0
while True:
all_ips = [] #存放所有的IP地址
f = open('access.log',encoding='utf-8')
f.seek(point) #移动文件指针
for line in f: #直接循环一个文件对象,每次循环的是文件的一行
ip = line.split()[0] #拿到IP地址
all_ips.append(ip) #把它存入数组当中
point = f.tell() #记录指针位置
all_ip_set = set(all_ips)
for ip in all_ip_set: #循环集合当中的IP,没有重复的
if all_ips.count(ip) > 50: #判断的是数组当中的IP
print('攻击的ip是:%s'%ip)
f.close()
time.sleep(2)

Python学习之==>文件操作的更多相关文章

  1. python学习笔记:文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  2. python学习总结---文件操作

    # 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...

  3. python学习日记(文件操作)

    文件操作概述 计算机系统分为:操作系统,计算机硬件,应用程序. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序 ...

  4. 03 python学习笔记-文件操作(三)

    本文内容主要包括以下方面: 1. 文件操作基本认识2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 文件的修改 一.文 ...

  5. python学习day8 文件操作(深度学习)

    文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...

  6. python 学习分享-文件操作篇

    文件操作 f_open=open('*.txt','r')#以只读的方式(r)打开*.txt文件(需要与py文件在同一目录下,如果不同目录,需写全路径) f_open.close()#关闭文件 打开文 ...

  7. Python学习笔记——文件操作

    python中,一切皆对象.   一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...

  8. Python学习之文件操作

    Python 文件打开方式 文件打开方法:open(name[,mode[buf]]) name:文件路径mode:打开方式buf:缓冲buffering大小 f = open('test.txt', ...

  9. Python学习 :文件操作

    文件基本操作流程: 一. 创建文件对象 二. 调用文件方法进行操作 三. 关闭文件(注意:只有在关闭文件后,才会写入数据) fh = open('李白诗句','w',encoding='utf-8') ...

随机推荐

  1. Python3零基础入门学习视频+源码+课件+习题-小甲鱼

    目录 1. 介绍 2. 目录 3. 下载地址 1. 介绍 适用人群 完全零基础入门,不需要任何前置知识. 课程概述 本系列教程面向零基础的同学,是一个深入浅出,通俗易懂的Python3视频教程. 前半 ...

  2. 【转】在Linux下写一个简单的驱动程序

    转自:https://www.cnblogs.com/amanlikethis/p/4914510.html 本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以 ...

  3. C#基础知识之图解TCP IP》读书笔记

    一.网络基础知识 1. 计算机使用模式的演变 2.协议 协议就是计算机与计算机之间通过网络实现通信事先达成的一种“约定”.这种“约定”使那些由不同厂商的设备.不同的CPU以及不同的操作系统组成的计算机 ...

  4. idea+maven3.6.1构建maven工程报PKIX:unable to find valid certification path to requested target

    转载于  https://www.cnblogs.com/xiaoping1993/p/9717649.html 注意可能在idea工具执行java命令提示找不到类,返回类的最上层包路径 然后再执行j ...

  5. 解决 Failed to start LSB: Bring up/down networking 问题

    我用的是虚拟机,一换网络环境虚拟机的ip就没有了,重启网上就报Failed to start LSB: Bring up/down networking错误.网上查了一圈说什么HWADDR有问题,改了 ...

  6. 数据结构-STL序列式容器总结

    根据序列在容器中的排列特性,将常见数据结构分为:序列式容器和关联式容器. 常见序列式容器有 1.array(build-in)c++內建 2.vector 3.heap(以算法方式呈现) 4.prio ...

  7. 【leetcode】1221. Split a String in Balanced Strings

    题目如下: Balanced strings are those who have equal quantity of 'L' and 'R' characters. Given a balanced ...

  8. 2019春Python程序设计作业1(0319-0325)

    判断题 1-1 在Python 3.x中可以使用中文作为变量名. (2分) T         F Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型.(2分) T     ...

  9. CSS自适应布局

    目标效果: 缩小浏览器之后 在<head>最前面引入flexible.js <head> ... <script type="text/javascript&q ...

  10. JavaScript动态创建script标签并执行js代码

    <script> //创建一个script标签 function loadScriptString(code) { var script = document.createElement( ...