目录结构:

contents structure [-]

1.简介

在Python中无需引入额外的模块来进行文件操作,Python拥有内置的文件操作函数(除了内置文件操作函数,Python语言也提供了额外的文件操作模块,它们具有更加强大的功能)。

os模块提供了在操作系统上可移植的文件操作方法。如果只是想要读取和写入数据,那么可以用内置的open()方法。如果想要操作路径,可以使用os.path模块。如果想要在命令行上读取所有的数据行,那么可以使用fileinput模块。如果想要创建一个临时文件或路径,那么可以使用tempfile模块。如果想要更高级别的文件和目录操作,那么可以使用shutil模块。

下面开始介绍内置的Open方法(在本文的后面还有关于os和fileinput模块的讲解):

首先需要用Python中的内置open函数获得一个文件对象(file object)。

内置open函数可以直接打开一个文件(file),然后返回一个文件对象(file object),文件对象包含了的大量方法和属性,可以用这些方法和属性操作被打开的文件。

文件对象的closed属性,表示一个文件是否关闭(如果已关闭返回True,否则返回False)。mode,获取文件的打开模式。name,获取文件的名称。

2.Python中的文件类型

在Windows操作系统中,文件可以是图像、文本、可执行、音频、视频等等文件格式。但是在python中,文件被分为两类:一类是文本文件,另一类是二进制文件。文本文件由一行行的字符构成,每一行文本的末尾都有一个EOL字符(End Of Line Character)。EOL标志着当前行的结束和新的一行的开始。二进制文件不同与文本文件,二进制文件也只能由知道文件格式的应用程序处理。

3.内置函数的文件操作

3.1 open()函数

Python中的内置函数open会打开一个文件,并且返回一个文件对象。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file:打开文件的路径,必需提供。
mode:打开模式,默认为r(只读访问)
buffering:缓冲模式,值为0表示没有缓冲,1表示行缓冲,大于1就表示缓冲区域的大小,负数表示默认为系统的缓冲区大小。设置了缓冲后,可以用flush()方法刷新缓冲。
encoding:文件的操作的编码名称
errors:一个可选字符串,指定如何处理编码和解码的错误
newline:控制换行符模式的行为
closefd:如果为false,那么应该传入一个文件描述符(file descripter)而不应该传入文件名称。如果是True,那么必须传入文件名称。否则会出现错误。
opener:一个可调用对象,

上面的参数中只有file参数是必需提供的,mode参数指定了文件的打开模式,接下来笔者会详细介绍它的所有取值。

3.2 Mode

Mode代表文件的打开模式,在上面介绍的open方法就需要用到文件的打开模式(Mode),open的参数中mode是可选的,下面的表阐述了Mode的取值。

模式 描述
r 以只读的方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件只用于读。文件指针将会放在文件的开头。
r+ 打开文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会写入到已有的内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会写入到已有的内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。在文件打开时会使用追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

下面是一个使用案例:

f = open("test.txt","r")
print(f)
f.close()

在上面介绍过,open函数会返回一个文件对象(File Object)。一旦我们拿到这个文件对象,就可以调用这个对象上的属性和方法了。最常用的方法就是read和write了。

3.3 创建文本文件

为了增加对文本文件的熟悉程度,接下来我们将会创建自己的文本文件,并且在上面做一些练习。用一个文本编辑器,创建一个名为testfile.txt的文件。然后在同一级目录下,就可以使用如下的代码进行文件写入操作了

file = open(“testfile.txt”,”w”)
file.write(“Hello World”)
file.write(“This is our new text file”)
file.write(“and this is another line.”)
file.write(“Why? Because we can.”)
file.close()

当我们打开testfile.txt后,就可以文件内容如下:

$ cat testfile.txt
Hello World
This is our new text file
and this is another line.
Why? Because we can.

3.4 读取文本文件

读取文件的内容的方式是多种多样的,如果需要读取一个文件中的所有的内容,那么可以使用read方法。

file = open(“testfile.txt”, “r”)
print file.read()
file.close()

你会看见testfile.txt的所有文件内容都会被输出。

我们也可以只读取指定数量的字符,只需要将需要读取的字符数量传递给read方法便可以了。

file = open(“testfile.txt”, “r”)
print file.read(5)
file.close()

输出:

Hello

如果想一行行的读取文本文件的内容,那么可以使用readline方法。

file = open(“testfile.txt”, “r”)
print file.readline()
file.close()

输出:

Hello World 

如果想返回文件中的每行数据,那么可以使用readlines方法。

file = open(“testfile.txt”, “r”)
print file.readlines()
file.close()

输出:

[‘Hello World’, ‘This is our new text file’, ‘and this is another line.’, ‘Why? Because we can.’] 

3.5 循环文件对象

如果想要更有效率的循环文件中的每一行数据,那么可以使用循环语句,使用循环语句代码不仅简单而且易读。

file = open(“testfile.txt”, “r”)
for line in file:
print line
file.close()

输出:

Hello World
This is our new text file
and this is another line.
Why? Because we can.

3.6 关闭文件

当完成对文件的操作后,就可以使用close()方法关闭文件。它将会彻底关闭文件,中断正在使用资源,并且将这些资源返还给系统。

在使用完文件之后,记得要调用close()方法。在调用close()后,任何对文件对象(file object)的操作都是非法的。

在上面的所有案例中,我们在每次使用完文件对象后都调用过close()方法,这是非常好的习惯。

3.7 With语句

可以将with语句应用到文件对象(file object)上,使用with语句语法更清晰。使用with语句的优点在于任何打开的文件都会自动关闭,因此使用with不必担心资源的释放问题。

使用with语句打开文件的格式:
with open("filename") as file:

下面是一个完整的案例:

with open(“testfile.txt”) as file:
data = file.read()
//do something with data

在上面的案例代码中,我们并没有使用close()关闭文件对象。这是因为with语句会自动帮我们关闭,编程人员便可以更专注业务逻辑代码。

下面是循环文件内容的案例:

with open(“testfile.txt”) as f:
for line in f:
print line,

4.os模块

os模块提供了许多与操作系统相交互的函数,OS是Python的标准组件模块。该模块提供了可移植性的文件操作方法。os和os.path模块包含了许多能够与文件操作系统相交互的方法。

os.name

导入该模块的操作系统的名称,windows是nt,linux是posix

import os
print(os.name) #windows是nt,linux是posix

输出:

posix

os.getcwd()

os.getcwd()函数返回当前的工作目录(Current Working Directory,CWD)

import os
print(os.getcwd())
# 打印当前的绝对路径
# os.path.abspath('.') # 打印当前路径下的文件和文件夹
# os.listdir('.')

输出:

/home/user/test

os.popen()

该方法会打开一个连接到命令行的管道,该管道的读写性依赖于打开模式。
os.popen(command[, mode[, bufsize]])
mode(打开模式)和bufsize不是必须要提供的。如果为打开模式为提供,那么默认为"r",也就是只读模式(read only)。
案例:

import os
fd = "a.txt" # popen() 和 open() 相似
file = open(fd, 'w')
file.write("Hello")
file.close()
file = open(fd, 'r')
text = file.read()
print(text) # popen() 提供了直接访问文件的管道
file = os.popen(fd, 'w')
file.write("Hello")
# 其他的一些操作
# 关闭文件
file.close()

os.close()

如果一个文件是使用open()打开的,那么只能使用close()关闭。但是如果一个文件是通过os.popen()的,那么可以使用close()或os.close()方法。如果我们试图用os.close()去关闭一个open()打开的文件,那么会抛出错误:

import os
fd = "a.txt"
file = open(fd, 'r') #使用open打开文件
text = file.read()
print(text)
os.close(file) #使用os.close()关闭文件

输出:

Traceback (most recent call last):
File "/home/user/test/a.py", line 6, in
os.close(file)
TypeError: an integer is required (got type _io.TextIOWrapper)

os.rename()

可以使用os.rename()重命名文件的名称,被命名的文件必需存在而且用户应该具有改变文件名称的权限。

import os
fd = "a.txt"
os.rename(fd,'New.txt')
os.rename(fd,'New.txt')

输出:

Traceback (most recent call last):
File "/home/user/test/a.py", line 3, in
os.rename(fd,'New.txt')
FileNotFoundError: [WinError 2] The system cannot find the
file specified: 'a.txt' -> 'New.txt'

5.fileInput模块

fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性读取所有行。
用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。

典型用法:

import fileinput
for line in fileinput.input():
process(line)

基本格式:

fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])

参数说明:

files:                  #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
inplace:                #是否将标准输出的结果写回文件,默认为0不返回,设置为1时返回
backup:                 #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
bufsize:                #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
mode:                   #读写模式,默认为只读
openhook:               #该钩子用于控制打开的所有文件,比如说编码方式等;

常用函数

函数 描述
fileinput.input() 返回能够用于for循环遍历的对象
fileinput.filename() 返回当前文件的名称
fileinput.lineno() 返回当前已经读取的行的数量(或者序号)
fileinput.filelineno() 返回当前读取的行的行号
fileinput.isfirstline() 检查当前行是否是文件的第一行
fileinput.isstdin() 判断最后一行是否从stdin中读取
fileinput.close() 关闭队列
#test.py
#---样本文件---
c:Python27>type 1.txt
first
second c:Python27>type 2.txt
third
fourth
#---样本文件---
import fileinput def process(line):
return line.rstrip() + ' line' for line in fileinput.input(['1.txt','2.txt'],inplace=1):
print process(line) #---结果输出---
c:Python27>type 1.txt
first line
second line c:Python27>type 2.txt
third line
fourth line
#---结果输出---

参考文章:

https://www.pythonforbeginners.com/files/reading-and-writing-files-in-python
https://www.geeksforgeeks.org/os-module-python-examples/
https://www.2cto.com/kf/201412/361320.html

【Python】解析Python中的文件操作的更多相关文章

  1. 深入学习Python解析并解密PDF文件内容的方法

    前面学习了解析PDF文档,并写入文档的知识,那篇文章的名字为深入学习Python解析并读取PDF文件内容的方法. 链接如下:https://www.cnblogs.com/wj-1314/p/9429 ...

  2. python解析VOC的xml文件并转成自己需要的txt格式

    在进行神经网络训练的时候,自己标注的数据集往往会有数据量不够大以及代表性不强等问题,因此我们会采用开源数据集作为训练,开源数据集往往具有特定的格式,如果我们想将开源数据集为我们所用的话,就需要对其格式 ...

  3. (Python )格式化输出、文件操作、json

    本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...

  4. 深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  5. NO.3:自学python之路------集合、文件操作、函数

    引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...

  6. 第32课 Qt中的文件操作

    1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...

  7. 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作

    原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载 ...

  8. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...

  9. 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理

    [源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 ...

随机推荐

  1. centos7配置jdk8环境变量

    最近在Linux的环境下配置jdk,参照网上的一些教程出现了一些问题,原因大致是由于centos的系统版本不同或者是jdk的版本不同导致出现了一定的问题.包括常规的因为classpath配置不对出现的 ...

  2. ML- 核函数(Kernel) 的 SVM

    Why 核函数 目的是为了解决线性不可分问题. 核心思想是升维. 当样本点在低维空间不能很好地分开的时候, 可以考虑将样本通过某种映射(就是左乘一个矩阵) 到高维空间中, 然后在高维空间就容易求解一个 ...

  3. Docker 安装环境(redis、mongodb、mysql等)

    Docker下载地址 [ https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe ] 一.创建/启动 redis ...

  4. springboot读取静态资源文件的方式

    springboot的请求路径一般会经过Controller处理,但是静态资源文件在请求之后是直接返回的.这涉及到俩个配置项. spring.mvc.static-path-pattern=/** s ...

  5. 模块加载——modprobe和insmod的区别(转)

    转载地址:https://blog.csdn.net/qianyizhou17/article/details/44135133 linux设备驱动有两种加载方式insmod和modprobe,下面谈 ...

  6. rest framework 之视图

    一.APIView APIView 直接继承 View(Django 内置的 View),也就是说 APIView 是最贴近原生 Django 的 View 的. 因此可定制程度高,根据请求方法不同执 ...

  7. js-事件1

    本课我将讲述js中的事件及一些浏览器兼容问题 本章主要从以下几个方面讲起:1.事件流  2.事件的浏览器兼容   3.鼠标,键盘事件 1. 事件流 什么叫事件流? 描述的是事件接受的顺序.这句话听起来 ...

  8. egg 阻止 sql 注入,相关文章

    egg 阻止 sql 注入,相关文章 网址 注意!!我们极其不建议开发者拼接 sql 语句,这样很容易引起 sql 注入!!如果必须要自己拼接 sql 语句,请使用 mysql.escape 方法. ...

  9. Spring Boot 2.x(十六):玩转vue文件上传

    为什么使用Vue-Simple-Uploader 最近用到了Vue + Spring Boot来完成文件上传的操作,踩了一些坑,对比了一些Vue的组件,发现了一个很好用的组件--Vue-Simple- ...

  10. React Virtual DOM Explained in Simple English

    If you are using React or learning React, you must have heard of the term “Virtual DOM”. Now what is ...