文件操作

文件操作大概分三步:

  1. 把文件打开。
  2. 操作文件。
  3. 把文件关上。

打开文件

打开文件用open()函数,打开成功后返回一个资源,具体语法如下。

open(要打开的文件,打开方式,打开文件的格式,默认为utf-8)
#例如
f = open('passengers.txt','r',encoding='utf-8')

上例用open以只读的模式打开文件,因为该文本是utf-8编码的,所以第三个参数是utf-8

  • w 模式是写入,是创建一个新文件的写,所以如果已经有了该文件就会被覆盖掉,注意安全!
  • a 模式是追加模式,可读;不存在则创建;存在则只追加内容;

"+" 表示可以同时读写某个文件

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,可读,可追加

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb #当加b时,就不用写encoding参数了
  • wb #用二进制打印出来的结果会包裹在 b' 和 ' 中
  • ab

读取文件

data = f.read() #然后用read读取文件,里面可以传参输入5就是读5个字符,不输入就是读所有字符
#读取所有内容,文件指针就移动到了文件末尾
data = f.readline() #读取一行内容
data = f.readlines() #将每一行变成一个元素,组成一个列表
#注意,readlines是将文件内容读取后放到内存里,所以它只能读小文件,不能读大文件

下面是读取大文件最好的方式

for line in f:
print(line)
#这是读取大文件最好的方式,每次只读一行到内存当中,读下一行的时候就会覆盖当前内存当中的数据

写入文件

f.write('这里是写入的内容') #用write来写入内容

print(f.tell()) #返回指针的位置
f.seek(0) #移动指针的位置,0代表移动到第0个的位置上
print(f.encoding) #打印文件的编码
print(f.fileno()) #打印文件的编号
print(f.name) #打印打开的文件名字
print(f.seekable()) #判断文件是否可读
print(f.writable()) #判断文件是否可写
print(f.flush()) #强制刷新缓存
print(f.closed) #判断文件是否关闭
f.truncate(10) #从头开始截取10个字符

关闭文件

手动关闭文件用close()函数。

f.close() #关闭文件

自动关闭文件。

with open() as f1:
pass
pass
# 资源只会在with里面打开,如果执行完毕则会自动关闭资源 #并且可以用下面这种方式同时打开多个资源
with open() as f1,open() as f2 ,\
open() as f3,open() as f4:
pass
pass

##############下面是一个修改文件的案例##############

f = open('passengers','r',encoding='utf-8')
f_new = open('new','w',encoding='utf-8')
for line in f:
if "漂浮在一片无奈" in line:
line = line.replace('漂浮在一片无奈','人类的渺小') # replace函数在字符串操作文章中可见
f_new.write(line)
f.close()

  其实就是将一个文件的内容在内存中修改完后写入到另一个文件中
  因为Python中没有直接修改文件内容的方法。

#############修改文件的另一种方法##################

file_data = ""
with open(file,"r",encoding="utf-8") as f:
for line in f:
if old_str in line:
line = line.replace(old_str,new_str)
file_data += line
with open(file,"w",encoding="utf-8") as f:
f.write(file_data)

  这种方法是先将所以的内容都读出来,并且再写到同一个文件中。

编码之间的转换

需知:
1.在python2默认编码是ASCII,python3里默认是unicode。
2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),so utf-16就是现在最常用的unicode版本,不过在文件里存的还是utf-8,因为utf8省空间。
3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string。

原理图:

utf-8转gbk:
我需要先用decode()解码成为Unicode,然后再用encode()转换成gbk
decode()函数传入一个参数,参数为我当前的编码是什么,或者说我要将什么编码转换成Unicode;
encode()函数传入一个参数,参数为我要转换成什么编码
如果不传参则默认是utf-8
gbk转utf-8也是同理

也就是说Unicode作为中间编码,用来完成utf-8和gbk之间的转换。

str = '你好' #假设当前为utf-8   注意:Python3里面的默认编码为Unicode
str = str.decode('utf-8') #将utf-8转换为Unicode
str = str.encode('gbk') #将Unicode转换为gbk
print(str)

如果该文件为gbk,同时Python3的默认编码又是Unicode,则需要告诉程序不要按照默认的编码去执行,要按照gbk的编码去执行,这时就要在文件最顶端声明文件编码格式如下:
#-*- coding:gbk -*-
Python3默认是Unicode,而文件又是utf-8类型,两个编码不统一输入中文还不会乱码是因为utf-8是Unicode的一个扩展集,所以Python3默认支持中文不乱码。

在Python3中执行了encode()后,除了将编码改变了之外,还将它变为byte类型。

Python学习之路4 - 文件操作&编码转换的更多相关文章

  1. Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...

  2. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  3. python学习 day07打卡 文件操作

    本节主要内容: 初识文件操作 只读(r,rb) 只读(w,wb) 追加(a,ab) r+读写 w+写读 a+追加写读 其他操作方法 文件的修改以及另一种打开文件句柄的方法 一. 初识文件操作 使用py ...

  4. Python学习之路day3-文件操作

    一.概述 作为IO操作的重要部分,文件操作需要经常用到,下面简述下python中操作文件的流程: 1. 打开文件,得到一个文件句柄并赋值给一个变量 f = open("test.txt&qu ...

  5. Python学习之路5☞文件处理

    一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声:燕池 萧: ...

  6. python学习笔记(十)、文件操作

    在前面我们了解到了没得模块,其中有一个模块为fileinput,为文件操作模块,不知道小伙伴们是否还记得? 1 打开文件 要打开文件,可以使用fileinput中的fileinput.input函数进 ...

  7. Python学习(五) —— 文件操作

    一.文件操作 1.文件操作:数据持久化的一种      步骤:找到文件,打开文件,操作:读.写.追写,关闭文件      打开文件:f = open(文件路径,操作模式,编码方式),f:文件句柄.文件 ...

  8. python成长之路五-文件操作

    1,文件操作 f = open("D:\种子.txt",encoding="utf-8",mode="r") # 打开一个种子.txt文件, ...

  9. python学习之路 三:字符编码

    本节重点 彻底掌握字符编码之前的转换关系 掌握 python2 vs python3 上编码的区别 掌握 python2 和python3 上bytes,str 的区别 补充知识点:三元运算 ​三元运 ...

随机推荐

  1. 路由(二) router-link的使用

    main.js import Vue from 'vue'import App from './App'import VueRouter from 'vue-router'import footer ...

  2. 利用tornado使请求实现异步非阻塞

    基本IO模型 网上搜了很多关于同步异步,阻塞非阻塞的说法,理解还是不能很透彻,有必要买书看下. 参考:使用异步 I/O 大大提高应用程序的性能 怎样理解阻塞非阻塞与同步异步的区别? 同步和异步:主要关 ...

  3. 关于如何去Apple.cn下载Xcode以及模拟器包

    前言:对于一个懒惰的iOS开发,Xcode的更新我是迟迟没有去下载.有人或许会说:你并不是一个合格的iOS开发者! T3T 我承认自己缺少拓新精神,Apple的尿性是:坑死第一批体验者不偿命~表示本人 ...

  4. html5中audio支持音频格式

    HTML5 Audio标签能够支持wav, mp3, ogg, acc, webm等格式,但有个很重要的音乐文件格式midi(扩展名mid)却在各大浏览器中都没有内置的支持.不是所有的浏览器都支持MP ...

  5. memcache类的扩展函数

    Memcache — Memcache类 /****连接****/1.Memcache::connect – 创建一个Memcache对象语法:bool Memcache::connect ( str ...

  6. 部署laravel项目

    1 先登录到服务器上,将代码克隆下来 git clone 项目地址 2 避免composer太慢,启用本镜像服务 可以先安装 apt-get install zip,unzip,php7.0-zip ...

  7. 中国软件大会上大快搜索入选中国数字化转型TOP100服务商

    大快搜索自荣获“2018中国大数据企业50强”殊荣,12月20日在由工信部指导,中国电子信息产业化发展研究院主办的2018中国软件大会上,大快搜索获评“2018中国大数据基础软件领域领军企业”称号,入 ...

  8. 决策树算法之ID3与C4.5的理解与实现

    github:代码实现 本文算法均使用python3实现 1. 决策树   决策树(decision tree)是一种基本的分类与回归方法(本文主要是描述分类方法),是基于树结构进行决策的,可以将其认 ...

  9. Java设计模式(17)——行为模式之观察者模式(Observer)

    一.概述 概念 UML简图 我们根据一个示例得类图来分析角色 角色 抽象主题:保存观察者聚集(集合),管理(增删)观察者 抽象观察者:定义具体观察者的抽象接口,在得到主题通知后更新自己 具体主题:将有 ...

  10. springBoot整合ecache缓存

    EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心 ...