文件操作

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

一、文本文件

1.1 文件操作流程

  1、打开文件,获得文件句柄,并赋值给一个变量 ;

  2、通过句柄对文件进行相关操作;

  3、关闭文件

示例:

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2018/8/23 f = open('动物世界.txt','r',encoding='utf-8')
content = f.read()
print(content)
f.close() #***************运行结果*****************
'''
东打一下西戳一下
动物未必需要尖牙
示爱的方法有礼貌或是我管它
要将情人一口吞下
还要显得温文尔雅
螳螂委屈的展示旧伤疤
......
'''

open函数中,第一个参数为文件存储的位置+文件名(我在本地测试时文件与代码同级),第二个参数为文件的操作模式,第三个参数为操作的编码方式。

注意:文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统默认的是gbk编码,所以直接打开会乱码,需要encoding='utf8'。文件如果是gbk保存的,则直接打开即可。

1.2 文件的操作模式

========= ===============================================================
Character Meaning
--------- ---------------------------------------------------------------
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)
========= ===============================================================

示例:

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/1/21 # 只读文件
f = open('a.txt','r',encoding='utf-8')
f.read()
f.close() # 只写文件
# 注意: 1.若无该文件,写文件操作时会自动创建;2.再次写入时会从开头写,将原来的内容覆盖
f = open('a.txt','w',encoding='utf-8')
f.write('helloll')
f.close() # 以追加模式写入,会接着上一次的地方继续写
f = open('a.txt','a',encoding='utf-8')
f.write('')
f.close() # 以读写的模式操作文件
f = open('a.txt','r+',encoding='utf-8')
f.read(5)
f.write('')
f.read()
f.close() # 以写读的模式操作文件
f = open('a.txt','w+')
print(f.read(5)) # 什么都没有,因为先格式化了文本
f.write('hello cdc')
print(f.read()) #还是read不到
f.seek(0)
print(f.read()) # 以二进制方式读文件
f = open('a.txt','rb')
content = f.read()
print(type(content))
f.close() # 以二进制方式写文件
f = open('a.txt','wb')
f.write('hello alvin!'.encode())
f.close()

1.3 文件操作的具体方法

文件内容的读取:

 f.read()               # 将文件内容全部读出来
f.read(5) # 读取五个字节的内容
f.readline() # 读取一行
f.readlines() # 将所有内容以换行符为准分割,形成一个列表对象

查看光标位置及光标操作:

 #查看光标当前位置
f = open("a.txt","r",encoding="utf8")
print(f.tell())
print(f.read(5))
#一个中文默认为是三个字符
print(f.tell())
f.seek(0) #调整光标位置
print(f.read(5))
 f = open('a.txt', 'rb', )
f.read(3)
f.seek(3)
print(f.read(3)) f.seek(3,1) # 1为从当前位置,移动3个字节
print(f.read(3)) f.seek(-4,2) # 2为从从文件末尾算,向前移动4个字节
print(f.read(3))
f.close()

flush操作:将缓冲区的内容刷新到终端

 import sys,time
for i in range(30):
sys.stdout.write("*") #在缓冲区内写内容
sys.stdout.flush() #将缓冲区内容刷新到终端显示
print("*",end='',flush=True)
time.sleep(0.2)
f = open("小重山","w",encoding="utf8")
f.truncate() #截断操作,只保留光标前的内容,不设置参数时默认光标位置为0

1.4 with方法

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

 with open('a.txt','r',encoding='utf-8') as f:
f.readline()

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。with支持同时对多个文件的上下文进行管理,即:

 with open('a.txt','r',encoding='utf-8') as f_read, open('b.txt','w',encoding='utf-8') as f_write:
f_read.readline()
f_write.write('hello')

1.5  踩坑啦!!!

对于文件的读取操作,本人在公司遇到过不少的麻烦。。。由于每个人使用的文本编辑器不同,并且不是所有人都能关注到语言格式的问题,所以往往存储的文件编码格式五花八门,等到这些数据到我手里需要处理的时候。。。我的内心    (▼ヘ▼#)     (╯°Д°)╯︵┻━┻

起初我打算自己写一套脚本来识别各种语言格式并统一转化成utf-8格式,无奈编码格式实在是太多种了,很难判断完全。后来我发现有一个非常巧妙的方法:

 with open('filename','r',encoding='iso-8859-1') as f:
for line in f.readlines():
content = bytes.decode(line.encode('utf-8'))
print(type(content))

以'iso-8859-1'的编码方式去读取文件,无论哪种编码格式的文件都可以以bytes类型的形式被读取出来,接着只要再将bytes转换成str,并以'utf-8'格式编码就大功告成了!

还有一种情况,在已经知道文件是以'utf-8'编码格式存储的情况下,以'utf-8'方式去读取还是报错:

 with open('a.txt','r',encoding='utf-8') as f:
for i in f.readlines():
print(i) # 结果报错
#'\ufeffHello,World\n'

a.txt的文件编码格式为utf-8,但是读取的第一行前面会出现非法字符'\ufeff',后来发现是utf-8编码有无BOM的原因造成的。BOM,即Byte Order Mark,就是字节序标记,具体原理感兴趣的童鞋可以谷歌了解一下!遇到这种情况只需要在读取文件的时候如下操作即可:

 with open('a.txt', 'r', encoding='utf-8-sig') as f:
for i in f.readlines():
print(i)

二、Excel文件

python中操作excel文件的第三方库有很多,在这边主要介绍xlrd、xlwt、openpyxl三种常用的库。

To be continue......


craw_pics

Python学习—基础篇之文件操作的更多相关文章

  1. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

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

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

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

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

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

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

  5. Python学习之路4 - 文件操作&编码转换

    文件操作 文件操作大概分三步: 把文件打开. 操作文件. 把文件关上. 打开文件 打开文件用open()函数,打开成功后返回一个资源,具体语法如下. open(要打开的文件,打开方式,打开文件的格式, ...

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

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

  7. Python学习笔记七:文件操作

    文件操作 对照一个word文件的操作方式,来体会文件操作的内容 打开文件:f=open(“file”),提示编码错误,windows默认是GBK f=open(“file”,encoding=”utf ...

  8. python基础篇 08 文件操作

    本节主要内容:1. 初识⽂件操作2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 其他操作⽅法9. ⽂件的修改以及另⼀ ...

  9. Python ( 学习 基础篇第一部 )

    目录 注释 注释的分类 注释的注意点 变量 变量的概念 变量的声明 变量的命名 变量的交换 变量的缓存机制 常量 进制 进制的转换 原码 反码 补码 六大数据类型 Number 的四大类 字符串 st ...

随机推荐

  1. 初窥async,await

    首先是一道今日头条的面试题:(听说是今日头条的并且已经烂大街了) async function async1() { console.log( 'async1 start' ) await async ...

  2. 远程桌面连接问题,ping服务器ip无法连接主机。

    今天是礼拜一,上班的第一天去连公司的服务器,远程桌面竟然登录不上. 试了一下同事的电脑,也是一样的情况无法连接到远程计算机.这下可把我急坏了. 试了很多方法,也重新启动了服务器,重启后同事的win10 ...

  3. Oracle使用备忘

    初学Oracle,很多语句记不住,写在这里备忘. 1.查看某表空间的数据文件 select file_name 文件名, tablespace_name 表空间名, bytes 已使用大小M, max ...

  4. PythonStudy——列表类型 List type

    # 1.定义 ls = [3, 1, 2] # 语法糖 | 笑笑语法 print(ls) ls = list([3, 1, 2]) # 本质 print(ls) # 嵌套 ls = [3, 1, [3 ...

  5. Linux查看和修改文件时间

    参考http://www.361way.com/chang-file-time/1632.html 一:查看时间 1:查看文件的具体时间信息 File: `probn' Size: Blocks: I ...

  6. Spark程序运行常见错误解决方法以及优化

    转载自:http://bigdata.51cto.com/art/201704/536499.htm Spark程序运行常见错误解决方法以及优化 task倾斜原因比较多,网络io,cpu,mem都有可 ...

  7. 收藏Dotnetbar的官方学习链接

    Archive for the DotNetBar for Windows Forms Category: http://www.devcomponents.com/kb2/?cat=3 视频教程: ...

  8. WampServer的下载方法

    http://www.wampserver.com/ 无法访问 报网络连接错误 2019.01.13 最近要用到Windows+apache+mysql+php,为了追求更快的实现速度和更高的稳定性, ...

  9. python:函数初始

    一.函数 1.函数初始:函数就是封装一个功能 2.函数名,函数体,关键字,函数的返回值 def 关键字,定义一个函数 my_len 函数名书写规则和变量一样 def 与函数名中间一个空格 函数名(): ...

  10. 涨姿势:深入 foreach循环

    我们知道集合中的遍历都是通过迭代(iterator)完成的. 也许有人说,不一定非要使用迭代,如: List<String> list = new LinkedList<String ...