python基础===文件对象的访问模式,以及计数循环的使用方法
案例一:
一个几M的文本文件,需要每隔100行写到新的文件中。
代码实现如下:
with open(r'f:\book.txt','rb') as f1:
with open(r'f:\book2.txt','wb') as f2:
i = 0
for line in f1:
i+=1
if i % 33 ==0:
f2.write(line)
这里补充一个知识点:
文件对象的访问模式
文件模式 | 操作 |
r | 以读方式打开 |
w | 以写的方式打开(必要时会清空) |
r+ | 以读写模式打开 |
w+ | 以读写模式打开(必要时会清空) |
a | 以追加模式打开,不会清空。(必要时创建新文件) |
a+ | 以读写模式打开,不会清空。(必要时创建新文件) |
ab | 以二进制追加模式打开,不会清空。(必要时创建新文件) |
ab+ | 以二进制读写模式打开。(必要时创建新文件) |
rb+ | 以二进制读写模式打开 |
rb | 以二进制读模式打开 |
wb | 以二进制读写模式打开(必要时会清空) |
在执行上面代码的时候,如果以r或者w的模式打开。会报错:
File "C:/Users/yangbo/Desktop/计数循环.py", line 4, in <module>
for line in f1:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 18: illegal multibyte sequence
所以,必须以二进制模式打开!
案例二:
请问一个日志文本文件有2000行,我要提取其中的100行到200行,怎么做?
with open(r'f:\book.txt','rb') as f1:
with open(r'f:\book2.txt','wb') as f2: #以二进制追加模式打开!如果没有book2.txt文件,新建一个
i = 0
while True:
line = f1.readline()
i += 1
if i>100 and i<200:
f2.write(line)
if i>200:
break
if not line:
break
python基础===文件对象的访问模式,以及计数循环的使用方法的更多相关文章
- Python文件对象的访问模式
- python基础——获取对象信息
python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...
- python 基础-文件读写'r' 和 'rb'区别
原文链接: python基础-文件读写'r' 和 'rb'区别 一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r ...
- python中文件操作的六种模式及对文件某一行进行修改的方法
一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...
- python打开文件可以有多种模式
一.python打开文件可以有多种模式,读模式.写模式.追加模式,同时读写的模式等等,这里主要介绍同时进行读写的模式r+ python通过open方法打开文件 file_handler = open( ...
- Python获得文件时间戳 异常访问监控 邮件定时提醒
Python获得文件时间戳 异常访问监控 邮件定时提醒
- python每个文件都需要顶部注释,那今天介绍一个方法,只需要设置一次,下次新建python文件后,注释自动出现在顶部的方法
python每个文件都需要顶部注释,那今天介绍一个方法,只需要设置一次,下次新建python文件后,注释自动出现在顶部的方法 只需要在file -----settings------file and ...
- 转:导出csv文件数字会自动变科学计数法的解决方法
导出csv文件数字会自动变科学计数法的解决方法 其实这个问题跟用什么语言导出csv文件没有关系.Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科 ...
- python基础——文件访问模式
文件访问模式 访问模式 说明 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. w 打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件. a 打开一个 ...
随机推荐
- JavaScript - arguments object
The arguments object is an Array-like object corresponding to the arguments passed to a function. fu ...
- 【iOS开发】创建单例的两种方法
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + ( ...
- 本周学习总结JAVA
6. 为如下代码加上异常处理 byte[] content = null; FileInputStream fis = new FileInputStream("testfis.txt&qu ...
- epc笔记
http://wenku.baidu.com/view/5e921520dd36a32d7375812a.html 1. 先注册, EPC注册EPS业务或non-EPS服务 ?? HSS做什么? 2 ...
- sometimes-ever js中创建数组,并往数组里添加元素
数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...
- 算法(11)Find All Duplicates in an Array
题目:数组的长度是n,里面的数是1到n,其中肯定有重复的,找到里面重复的数字 思路:自己想愣是没有想出来,直接看答案,关键点是看nums[i]和nums[nums[i]-1]之间的关系,遍历整个数组, ...
- AndroidStudio3.0 注解报错Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor.
体验最新版AndroidStudio3.0 Canary 8的时候,发现之前项目的butter knife报错,用到注解的应该都会报错 Error:Execution failed for task ...
- [剑指Offer] 36.两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点. [思路]找出两个链表的长度,然后让长的走两个链表的长度差,然后再一起走(因为两个链表用公共的尾部). /* struct ListNode { in ...
- SQL 取数值小数后两位,但不四舍五入
select round('1.67789',2,1) /* 1.67*/
- Thymeleaf 如何支持java8的时间LocalDate和LocalDatetime
一.添加依赖 <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thym ...