Python文件处理1

版权声明:原创文章转载请注明出处~ https://blog.csdn.net/PecoHe/article/details/90174171

14.1 读写文件

14.1.1 获取文件对象

文件的概念,我们都不会感到陌生。在操作系统中,一个word文档,一张图片,一首音乐,这些都是文件。文件会以其固有的格式保存在硬盘中。文件可以分为两种类型:

  • 文本文件
  • 二进制文件

其中,文本文件由若干可识别的字符组成,并且不能包含非文本字符之外的内容(图片等),例如,.txt,.bat都是文本文件,而.doc,.pdf则不是文本文件。二进制文件则不是由可识别的字符组成,如果用文本编辑器打开二进制文件,往往看到的都是一堆乱码。其实,计算机只支持二进制,所以,从底层的角度来说,一切都是二进制格式的,文本文件,也是二进制文件的一种,只是其内容,是我们能够识别的字符而已。

在Python中,我们可以通过open函数返回文件对象。这里的文件对象是一个泛指,其不只可以表示文件,也可以表示文件夹(路径)。格式如下:

open(file, mode='r')

file指定文件的路径,可以是相对路径,也可以是绝对路径。mode指定打开文件的模式,如下表。当读入文件或者写入文件时,会涉及到文件指针。文件指针指向的就是下一次要读取或写入的字符(或字节)位置,随着读取或写入的进行,文件指针也会随之而移动。

当文件不再使用时,我们需要对文件进行关闭,从而断开与外部文件的连接。断开连接可以调用文件对象的close方法。应该在哪里调用close呢?

  • 直接关闭。
  • 在finally中关闭。
  • 使用with关闭。

14.1.2 文件的读取

我们可采用如下方法来读取文件:

read(size=-1)

读取并返回文件内容。size指定读取的大小。如果是文本模式,以字符为单位,如果是二进制模式,以字节为单位。如果size省略,或者为负数,则返回文件的全部内容。如果文件已经没有内容可读取,返回空串("“或b”")。

readline()

返回文件的一行,保留末尾的换行符。如果没有内容可以读取,返回空串("“或b”")。

readlines()

返回一个列表,列表中的每个元素为文件的一行内容,每行保留末尾的换行符。

文件对象也是迭代器。然而如果文件过大,这会占据大量的内存空间。此时readlines不是一个好的选择。对于文件对象,其本身也是一个迭代器类型,我们可以使用for循环的方式对文件对象进行迭代,从而节省内存。
程序:文件迭代。

14.1.3 文件的写入

我们可以使用如下方法向文件写入数据:

write(content)

将content参数写入到文件中,返回写入的长度。如果是文本模式,以字符为单位,如果是二进制模式,以字节为单位。

writelines(lines)

参数lines为列表类型,将列表中所有元素写入文件中。
练习:实现文件的复制。

14.1.4 文件定位

我们可以调用文件对象的如下方法,获取或设置文件指针的位置:

tell()

返回文件指针的位置,即下一个要读取或写入的字符(字节)位置。以字节为单位。

seek(offset, whence)

改变文件的指针。offset指定新的索引位置偏移量。whence指定偏移量的参照位置:

  • 0:从文件头计算
  • 1:从当前位置计算
  • 2:从文件末尾计算

14.2 文件与路径的操作

14.2.1 os模块

os模块提供了很多操作目录与文件的功能。

mkdir(path)
创建path指定的目录。如果path所在的父目录不存在,或者path目录已经存在,都会产生异常。

makedirs(path, exist_ok=False)
创建path指定的目录。如果path所在的父目录不存在,则会连同父目录一同创建。如果path目录已经存在,当exist_ok值为False,会产生异常,如果exist_ok值为True,则不会产生异常(默认值为False)。

rmdir(path)
删除path指定的空目录,但不会删除父目录。如果path目录不存在,或者该目录不为空,将会产生异常。

removedirs(path)
删除path指定的空目录。如果父目录也为空,则会连同父目录一同删除(一直到根目录为止)。如果path不存在,或者该目录不为空,将会产生异常。

remove(path)
删除path指定的文件。如果path不是一个文件,或者文件不存在,将会产生异常。

rename(src, dst)
重命名一个文件或目录。src指定源文件的路径,dst指定重命名后的文件路径。src与dest要求为同一目录。

renames(old, new)
与rename相似,但是old与new指定的目录可以不同(此时类似于移动文件)。在方法执行时,会删除old路径中左侧所有的非空目录,并根据需要,创建new路径中不存在的目录。在Windows系统,old与new必须在同一盘符中。

getcwd()
返回当前的工作目录,即以脚本运行文件所在的目录。

os.walk(path) 
遍历路径下的文件

14.2.2 os.path模块

os.path模块提供了关于路径操作的相关功能。

abspath(path)
返回path的绝对路径。

basename(path)
返回path的最后一个部分。即path中操作系统分隔符(/或\等)最后一次出现位置后面的内容。如果path以操作系统分隔符结尾,则返回空字符串。

commonpath(paths)
参数paths为路径的序列,返回最长的公共子路径。

dirname(path)
返回path的目录部分。

exists(path)
判断路径是否存在,存在返回True,否则返回False。

getatime(path)
返回文件或目录的最后访问时间。

getmtime(path)
返回文件或目录的最后修改时间。

getsize(path)
返回文件的大小,以字节为单位。

isdir(path)
判断path是否为存在的目录,是返回True,否则返回False。

isfile(path)
判断path是否为存在的文件,是返回True,否则返回False。

join(path, *paths)
连接所有的path,以当前操作系统的分隔符分隔,并返回。空path(除了最后一个)将会丢弃。如果最后一个path为空,则以分隔符作为结尾。如果其中的一个path为绝对路径,则绝对路径之前的路径都会丢弃,从绝对路径处开始连接。

split(path)
将path分割成一个元组,元组含有两个元素,第2个元素为path的最后一个部分,第一个元素为剩余之前的部分。(dirname与basename)

14.2.3 shutil模块

shutil模块提供了高级操作文件的方式。我们可以通过该模块提供的功能,快捷方便的对文件或目录执行复制,移动等操作。

copy(src, dst)
复制文件,返回复制后的文件路径。src指定要复制的文件,如果dst是一个存在的目录,则将文件复制到该目录中,文件名与src指定的文件名一致,否则,将src复制到dst指定的路径中,文件名为dst中指定的文件名。

copy2(src, dst)
与copy函数类似,但是copy函数不会保留文件的元信息,例如创建时间,最后修改时间等。copy2函数会尽可能保留文件的元信息。

copytree(src, dst)
复制一个目录,目录中的文件与子目录也会递归实现复制,返回复制后的目录路径。src指定要复制的目录,dst指定复制后的目标目录,如果dst已经存在,则会产生异常。
使用该函数复制目录时,可以结合ignore_patterns函数对目录下的文件与子目录进行排除。
例如:

shutil.copytree("abc", "def", ignore=shutil.ignore_patterns("*.txt"))
ignore参数指定忽略的文件或目录,这样,所有名称以txt结尾的文件或目录将不会复制到目标目录中。

shutil.copytree("abc", "def", ignore=shutil.ignore_patterns("a*"))
参数a*指定所有以a开头的文件或目录不会将不会复制到目标目录中。

rmtree(path)
删除path指定的目录,目录中的子目录与文件也会一并删除。

move(src, dst)
将文件或目录移动到另外一个位置,src指定文件或目录的路径,当src为目录时,会将该目录下所有的文件与子目录一同移动(递归)。dst指定移动的目标文件或目录。

猜你喜欢

转载自blog.csdn.net/PecoHe/article/details/90174171
今日推荐