Python学习之==文件操作

1、打开文件的模式

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

2、文件基本操作

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

3、文件操作方法

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

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

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

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

5、文件指针

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

6、自动关闭文件

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

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

7、修改文件

修改文件有两种方式:

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

第一种方式:

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

第二种方式:

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

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

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

9、练习

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

import random
start_num = '1387691'
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)              # 不够四位,前面补0phone_num = start_num + new_numf.write(phone_num + '\n')
f.close()

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

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

转载于:https://www.cnblogs.com/L-Test/p/8983190.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java多线程创建runnable_Java线程池和runnables创建runnables

有很多方法可以做你想要的 . 您需要小心,不要最终创建太多线程 .以下是一个示例,您可以使用ExecutorCompletionService提高效率,也可以使用Runnable .import java.util.ArrayList;import java.util.List;import java.util.Random;import java…

CF某gym G

题目大意&#xff1a;给定n个点&#xff0c;求一条直线最多能经过几个点(n<1000) 做法&#xff1a;大暴力。。。枚举每一个点作为直线的端点&#xff0c;然后求出剩下n-1个点和它的斜率&#xff0c;斜率相同的说明可以同时在一条直线上 #include<bits/stdc.h> #define…

java嵌入式开发neo4j_java-嵌入式Neo4j实际如何工作?

我是neo4j的新手,根据我到目前为止所做的阅读,似乎有两种方法可以使用Neo4j REST和Embedded与neo4j进行交互.我有点困惑的是,“嵌入式”选项是否仅使您能够使用本机Neo4j API操纵数据存储,还是可以嵌入Neo4j并将其与Java应用程序打包,如果可以的话,我该怎么做&#xff1f;解决方…

rnn中文语音识别java_语音识别算法阅读之RNN-T-2018

论文&#xff1a;EXPLORING ARCHITECTURES, DATA AND UNITS FOR STREAMING END-TO-END SPEECH RECOGNITION WITH RNN-TRANSDUCER,2018CTC的一个问题在于&#xff0c;其假设当前帧的输出与历史输出之间的条件独立性&#xff1b;RNN-T引入预测网络来弥补CTC这种条件独立性假设带来…

java数字不等于_java – 仅使用set中的数字查找等于或大于给定目标的总和

首先让我们将这个问题简化为整数而不是实数,否则我们将无法获得快速优化算法.例如,让我们将所有数字乘以100,然后将其四舍五入为下一个整数.所以说我们有项目大小x1,…,xn和目标大小Y.我们想要最小化该值k1 x1 … kn xn – Y在这种条件下(1) ki is a non-positive integer fo…

Mybatis 系列2-配置文件

【Mybatis 系列10-结合源码解析mybatis 执行流程】 【Mybatis 系列9-强大的动态sql 语句】 【Mybatis 系列8-结合源码解析select、resultMap的用法】 【Mybatis 系列7-结合源码解析核心CRUD配置及用法】 【Mybatis 系列6-结合源码解析节点配置objectFactory、databaseIdProvid…

python中restful接口开发实例_Python RESTful接口开发02

什么是RESTfulRESTful是一种设计思想&#xff0c;一种风格。RESTful主要包括 资源 和 对资源的操作。资源&#xff1a; 对实体的抽象&#xff0c;图书、音乐、电影、学生等都属于资源。对资源的操作&#xff1a; HTTP 方法 行为 示例 GET 获取资源的信息 http://example.com/…

Storm环境搭建(分布式集群)

作为流计算的开篇&#xff0c;笔者首先给出storm的安装和部署&#xff0c;storm的第二篇&#xff0c;笔者将详细的介绍storm的工作原理。下边直接上干货&#xff0c;跟笔者的步伐一块儿安装storm。 原文链接&#xff1a;Storm环境搭建&#xff08;分布式集群&#xff09; Step1…

php 红包算法,PHP语言:实现微信红包拆分算法

本文主要向大家介绍了PHP语言&#xff1a;实现微信红包拆分算法&#xff0c;通过具体的内容向大家展示&#xff0c;希望对大家学习php语言有所帮助。 修复最后一个红包输出未保留2位数 修复领取的红包金额低于最小红包限制* 红包分配算法** example* $coupon new Coupon(…

java 强制向上转型,Java 转型(向上或向下转型)详解及简单实例

在Java编程中经常碰到类型转换&#xff0c;对象类型转换主要包括向上转型和向下转型。向上转型我们在现实中常常这样说&#xff1a;这个人会唱歌。在这里&#xff0c;我们并不关心这个人是黑人还是白人&#xff0c;是成人还是小孩&#xff0c;也就是说我们更倾向于使用抽象概念…

复习Python DB-API

一、python的DB-API 1.Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同 的方式操作各数据库。 Python DB-API使用流程: 1. 引入API模块。 2. 获取与数据库的连接。 3. 执行SQL语句和存储过程。 4. 关闭数据库连接。 2.Python操作mysql 安装包&am…

java se程序设计课后答案,JAVA SE程序设计及实践

实践3 类与对象实践3.4修改Menu类&#xff0c;增加显示普通员工、经理、管理员对应的功能菜单的方法。package com.dh.hrmanager.util;import java.util.Scanner;public class Menu {/*** 返回登陆菜单*/public void showLoginMenu() {System.out.println("\n\n\t\t欢迎进…

个人空间风格模版php,home.php这个页面风格模板在哪里修改?答案:space_home.html...

/template/default/home 空间模块模板目录editor_image_menu.htmfollow_feed.htm 广播首页follow_feed_li.htm 广播数据列表follow_user_header.htm 广播用户数据统计invite.htm 邀请模板magic_call.htm 道具-点名卡magic_detector.htm 道具-探测器magic_doodle.htm 道…

18.QT-QPlainEdit 信号与槽

QPlainEdit编辑功能 Public Slots void appendHtml ( const QString & html ) void appendPlainText ( const QString & text ) void centerCursor () void clear () void copy () void cut () void insertPlainText ( const QString & text ) void paste () void …

VS生成Cordova for Android应用之Gradle

VS生成Cordova for Android应用之Gradle 原文:VS生成Cordova for Android应用之Gradle一、Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置&#xff0c;抛弃了基于XML的各种繁琐配置。 …

进一法整数php,进一法取整、四舍五入取整、忽略小数等的取整数方法大全

PHP取整数函数常用的四种方法,下面收集了四个函数&#xff1b;经常用到取整的函数&#xff0c;今天小小的总结一下&#xff01;其实很简单&#xff0c;就是几个函数而已&#xff5e;&#xff5e;主要是&#xff1a;ceil&#xff0c;floor&#xff0c;round&#xff0c;intvalPH…

pjax转发

pjax几大特点&#xff1a; 1、异步&#xff08;ajax&#xff09; 2、地址栏改变路径 3、实现前进和后退back和forword 如何解决&#xff1a;地址变了之后&#xff0c;万一F5刷新的问题&#xff0c;主要是通过后台判断是否为pjax请求&#xff0c;是的话做个标志&#xff0c;在前…

php全局cors,PHP开启CORS - slagga的个人页面 - OSCHINA - 中文开源技术交流社区

php后台响应头部代码//json头header("Content-type: application/json");//跨域header("Access-Control-Allow-Credentials: true");header("Access-Control-Allow-Origin: 跨域URL");//CORSheader("Access-Control-Request-Methods:GET, P…

嘻嘻

今天我们来聊一下如何减肥&#xff1f; 其实我也不知道&#xff0c;嘻嘻~ 开个玩笑 好了&#xff0c;今天我们继续来学习新的知识。 在前两篇文章中&#xff0c;我们接触到了索引的概念&#xff0c;今天我们要对索引进行一个拓展。首先我们先来看一下下面这段代码&#xff1a; …

mysql :完整性约束

---恢复内容开始--- 一&#xff1a;介绍 约束条件与数据类型的宽度一样 &#xff0c;都是可选参数 作用&#xff0c;用于保证数据的完整性和 一致性 主要分为&#xff1a; primary key (pk) 标识该字段为该表的主键&#xff0c; 可以唯一的标识记录 foreign key &#xff08;fk…