Python—文件读写操作
初识文件操作
- 使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开文件的方式不同能够执行的操作也会有相应的差异。
- 打开文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使用的是r(只读)模式。
- 只读操作(r, rb)、只写模式(w, wb)、追加(a, ab)、读写模式(r+, r+b)、写读模式(w+, w+b)、追加读(a+)。
- 当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。
| 模式 | 描述 |
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
| rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
| r+b | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
| w | 打开一个文件只用于写入。若该文件已存在则将其覆盖。若该文件不存在,创建新文件。 |
| wb | 以二进制格式打开一个文件用于只写。若该文件已存在则将其覆盖。若该文件不存在,创建新文件。 |
| w+ | 打开一个文件用于读写。若该文件已存在则将其覆盖。若该文件不存在,创建新文件。 |
| w+b | 以二进制格式打开一个文件用于读写。若该文件已存在则将其覆盖。若该文件不存在,创建新文件。 |
| a | 打开一个文件用于追加。若该文件已存在,文件指针将会放在文件的结尾。 |
| ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。 |
| a+ | 打开一个文件用于读写。若该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。 |
| a+b | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。 |
文件内容:poem.txt
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
只是当时已惘然。
基本读取文件
# 读取文件,文件不存在会报错
file = open("poem.txt", "rt") content1 = file.read() # 把整个文件当做一个字符串返回,会加上每行末尾的换行符。打印输出的时候,遇到\n会自动换行。
print content1, type(content1) # 结果:沧海月明珠有泪,...只是当时已惘然。 <type 'str'> 附加:输出有换行格式的,这里不方便展示。 content2 = file.read(15) # 读取n个字符。如果再次读取,会在当前位置继续去读而不是从头读。如果使用的是rb模式. 则读取出来的是n个字节。
print content2, type(content2) # 结果:沧海月明珠 <type 'str'> content3 = file.readline() # 一次读取一行数据,每次读取出来的数据都会有一个\n,即换行符。可以使用strip()方法来去掉\n或者空格。
print content3, type(content3) # 结果:沧海月明珠有泪, <type 'str'> 附加:输出有换行格式的,这里不方便展示。 content4 = file.readlines() # 返回一个列表,每一行作为一个元素.每一个元素都包括"\n"。
print content4, type(content4) # 结果:["沧海月明珠有泪,\n", "蓝田日暖玉生烟\n",...]。 <type 'list'> 附加:列表长度为4
for line in content4:
print line.strip() for line in file: # 循环读取.每次读取一行内容.不会产生内存溢出的问题.推荐使用.
print line.strip() file.close()
基本写入文件
# 写入文件,文件不存在会创建新文件
file = open("poem.txt", "wt") file.write("沧海月明珠有泪,\n蓝田日暖玉生烟。") # 写入两行诗
file.write("此情可待成追忆,".decode("utf-8").encode("utf-8")) file.writelines(["沧海月明珠有泪,\n", "蓝田日暖玉生烟。"]) # 读取列表,写入两行诗 file.flush() # 刷新. 把缓冲区的内容写入到磁盘上.
file.close()
file对象相关的所有属性的列表
| 属性 | 描述 |
| file.closed | 如果文件已被关闭返回true,否则返回false。 |
| file.mode | 返回被打开文件的访问模式。 |
| file.name | 返回文件的名称。 |
| file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
高级文件读写
# with语句来自动帮我们调用close()方法,推荐以后用这种方式读写文件。
with open("poem.txt", "rb") as fr:
fr.read() with open("poem.txt", "wb") as fw:
fw.write('Hello, world!')
字符编码
# 要写入特定编码的文本文件,需要给open()函数传入encoding参数,将字符串自动转换成指定编码
with open("poem.txt", "wb", encoding='gbk') as fw:
fw.write('Hello, world!') # 要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:
with open("poem.txt", "rb", encoding='gbk') as fr:
fr.read() # 在文本文件中可能夹杂了一些非法编码的字符,可能会遇到UnicodeDecodeError。open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略。
with open("poem.txt", "rb", encoding='gbk', errors='ignore') as fr:
fr.read()
多个文件的读写,可以写成以下两种方式
# 方式1:
with open('poem1.txt','r') as f1:
with open('poem2.txt','r') as f2:
with open('poem3.txt','r') as f3:
........ # 方式2
with open('poem1.txt','r') as f1:
........
with open('poem2.txt','r') as f2:
........
with open('poem3.txt','r') as f3:
Python—文件读写操作的更多相关文章
- python 文件读写操作(24)
以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...
- Python 文件读写操作实例详解
Python提供了必要的函数和方法进行默认情况下的文件基本操作.你可以用file对象做大部分的文件操作 一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前 ...
- 一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.核心功能 ‘r’ ...
- python文件读写操作与linux shell变量命令交互执行
python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼! #coding=utf-8 #!/usr/bin/python import os impor ...
- python文件读写操作
操作文件时一般经历以下步骤: 打开文件 操作文件 1.打开文件: 文件句柄 = open('/path/to/file_name','pattern') pattern: r:只读模式,打开文件时默认 ...
- python 文件读写操作打开模式
‘r’:只读.该文件必须已存在. ‘r+’:可读可写.该文件必须已存在,写为追加在文件内容末尾. ‘rb’:表示以二进制方式读取文件.该文件必须已存在. ‘w’:只写.打开即默认创建一个新文件,如果文 ...
- python里文件读写操作
文件读写操作一种基本操作,但是里面也存在很多需要注意的问题,例如字符编码.内存缓冲.指针位置等等.如果忽视这些问题就会引起很多不必要的麻烦.简单来说,文件的读写分为几个过程: 打开文件,并定义操作文件 ...
- python(三)一个文件读写操作的小程序
我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...
- excel、xls文件读写操作
python 常用的excel.xls文件读写操作,有两个模块 xlrd:读 xlwt:写 本次先写一个读的例子: class CaseData(object): def __init__(self, ...
随机推荐
- ABP入门教程8 - 应用层创建应用服务
点这里进入ABP入门教程目录 创建目录 在应用层(即JD.CRS.Application)下创建文件夹Course //用以存放Course相关应用服务 在JD.CRS.Application/Cou ...
- Linux—vi/vim命令详解
如何在 vi 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...
- 对比keep-alive路由缓存设置的2种方式
方式有两种 .路由元信息(2.1.0版本之前) .属性方式(2.1.0版本之后新增) Vue2.1.0之前: 想实现类似的操作,你可以: 配置一下路由元信息 创建两个keep-alive标签 使用v- ...
- 解决plsql显示问号(???)问题
如何查看Oracle数据库的字符编码 1.查询Oracle Server端的字符集:有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select ...
- C语言中,嵌套的if语句的一些经验...
double f(double x){double result;if(x<0)result=-x+sin(x);else if(x==0)result=0; else if(10> ...
- "中国东信杯"广西大学第二届程序设计竞赛E Antinomy与红玉海(二分)
题目大意: n个人,每个人想参加a[i]轮游戏,但每场游戏必须有个一个人当工具人 问最少有几场游戏 题解: 二分 答案范围:[0,sigma a[i]] check:首先a[i]>=ans,其次 ...
- 打包一个python解释器
利用python的exec语句,可以很方便地动态执行python语句.如果一个python代码打包为了exe,其原先的代码就很难更改了.一个好的解决方法就是import相应的库,然后把主程序段放到一个 ...
- spring cloud 2.x版本 Gateway路由网关教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- JVM基础详解
JVM基础解析(一) Java里面有 JDK ,JRE, JVM ,这三者的关系是怎么样的呢? JDK是编译时环境: 整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库 ...
- LeetCode 387: 字符串中的第一个唯一字符 First Unique Character in a String
题目: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. Given a string, find the first non-repeating charact ...