文件操作

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

    转载http://www.cnblogs.com/tfanalysis/p/5505163.html ftp://sourceware.org/pub/pthreads-win32/ 有的时候需要使用 ...

  2. LeetCode - Maximum Frequency Stack

    Implement FreqStack, a class which simulates the operation of a stack-like data structure. FreqStack ...

  3. python中str函数isdigit、isdecimal、isnumeric的区别

    num = "1" #unicodenum.isdigit() # Truenum.isdecimal() # Truenum.isnumeric() # True num = & ...

  4. Kibana简介及下载安装

    现在你已经安装了Kibana,现在你一步步通过本教程快速获取Kibana核心功能的实践经验.学习完本教程,你将: 1.加载案例数据到你安装的Elasticsearch中 2. 定义至少一个索引匹配模式 ...

  5. 菜鸟Vue学习笔记(二)

    上一篇文章跟大家分享了Vue笔记上半部分,这篇文章接着跟大家分享.最近学习Vue越来越顺利了,今天接着学习,接着记录. 首先,来学习下常用的v-bind属性,它的作用是在属性中使用vue中定义的变量的 ...

  6. jenkins使用(ubuntu16.0环境)

    本文总结了使用jenkins过程.大部分是网上链接,以后自已查看使用. ssh远程链接服务器 检查是否开启ssh   ps -ef|grep ssh 1.安装ssh 2.开启root用户 3.充许ro ...

  7. SpringSecurity-FilterSecurityInterceptor的作用

    FilterSecurityInterceptor也是很重要的一个interceptor,它的作用是对request进行权限判断,允许访问或者抛出accessDenied异常. 这个类继承Abstra ...

  8. 基础 - 获得CPU主频

    // 获得cpu主频.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <windows.h> #include ...

  9. Ajax传递json数据简介和一个需要注意的小问题

    Ajax传递json数据 Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例: 项目结构 我们新建一个Django项目,在里面创建一个名为app01的应用: p ...

  10. Centos7.5 安装高版本Cmake 3.6.2

    下载Cmake wget https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz 解压Cmake tar xvf cmake-3.6.2.tar.gz & ...