Python基础之:Python中的IO

Python05

Python基础之:Python中的IO,第1张

IO就是输入和输出,任何一个程序如果和外部希望有交互的话,都需要使用到IO。相对于java而言,Python中的IO更加的简单,易用。

本文将会详细介绍Python中的IO操作。

linux中有三种标准输入输出,分别是STDIN,STDOUT,

STDERR,对应的数字是0,1,2。

STDIN是标准输入,默认从键盘读取信息;

STDOUT是标准输出,默认将输出结果输出至终端;

STDERR是标准错误,默认将输出结果输出至终端。

我们常用的 2>&1,指将标准输出、标准错误指定为同一输出路径 。

python中,我们可以使用print方法来输出信息。\

我们看下print函数的定义:

print函数将 objects 打印到 file 指定的文本流,以 sep 分隔并在末尾加上 end。 sep, end, file 和 flush 如果存在,那么必须以关键字参数的形式给出。

所有非关键字参数都会被转换为字符串,并会被写入到流,以 sep 分割,并在末尾加上 end。 sep 和 end 都必须为字符串;它们也可以为 None,这意味着使用默认值。 如果没有给出 objects,则 print() 将只写入 end。

file 参数必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使用 sys.stdout。 由于要打印的参数会被转换为文本字符串,因此 print()不能用于二进制模式的文件对象。 对于这些对象,可以使用 file.write(...)。

输出是否被缓存通常决定于 file,但如果 flush 关键字参数为真值,输出流会被强制刷新。

可以看到print的输出格式还是比较简单的。我们接下来看一下怎么丰富输出的格式。

如果想要格式化字符串,可以在字符串的开始引号之前加上 f 或 F。

这样的话,我们可以直接在字符串中引入变量值,只需要把变量放在 { 和 } 中间即可。

除了在{ }中放入Python变量之外,还可以在其中放入函数:

在 ':' 后传递一个整数可以让该字段成为最小字符宽度。方便列对齐:

{ }中的变量后面还可以跟着转值符号:'!a' 表示应用 ascii() ,'!s' 表示应用 str(),还有 '!r' 表示应用 repr():

除此之外,str本身自带一个功能强大的format 函数:

调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域,每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

再看一个使用索引的例子:

看一个关键字的例子:

再看一个组合的例子:

还有非常复杂的组合的例子:

或者使用 '**' 符号将 table 作为关键字参数传递:

还可以使用n类型 '{:n}' 来格式化数字:

如果我们只是想要将Python对象转换为字符串,那么可以使用repr()或者str(), str() 函数是用于返回人类可读的值的表示,而 repr()是用于生成解释器可读的表示。

举个例子:

str对象还提供了一些对字符串进行手动格式化的方法:

字符串对象的 str.rjust()方法通过在左侧填充空格来对给定宽度的字段中的字符串进行右对齐。类似的方法还有 str.ljust()和 str.center()。

如果输入的字符串太长,它们不会截断字符串,而是原样返回。

如果想保证字符串的长度,则可以使用切片: x.ljust(n)[:n] 。

还可以使用str.zfill()来用0填充字符串:

% 也可以用来格式化字符串,给定 'string' % values,则 string 中的 % 实例会以零个或多个 values 元素替换。 此操作通常被称为字符串插值。

python中文件读取非常简单,使用open()方法即可。

open()会返回一个文件对象。我们看一下它的定义:

第一个参数是文件名。

第二个参数是文件打开的模式,可用的模式有:

默认模式为 'r' 。

看一个open文件的例子:

文件打开了,自然需要被关闭,所以我们需要显示调用 f.close() 方法:

有没有类似java中的try with resource的自动关闭文件的功能呢?

我们可以使用with,这样文件在使用完毕之后,会自动被关闭,非常的好用。

文件被关闭之后,如果想要再次读取,就会报错:

获取到文件对象之后,我们就可以调用文件中的方法了。

f.read(size) 会读取一些数据并将其作为字符串(在文本模式下)或字节串对象(在二进制模式下)返回。

size 是一个可选的数值参数。 当 size 被省略或者为负数时,将读取并返回整个文件的内容;当取其他值时,将读取并返回至多 size 个字符(在文本模式下)或 size 个字节(在二进制模式下)。 如果已到达文件末尾,f.read() 将返回一个空字符串 ('')。

f.readline() 从文件中读取一行;换行符(\n)留在字符串的末尾,如果文件不以换行符结尾,则在文件的最后一行省略。如果 f.readline() 返回一个空的字符串,则表示已经到达了文件末尾,而空行使用 '\n' 表示,该字符串只包含一个换行符。

还有一种更加简单的读取方法,就是从文件中遍历:

如果你想以列表的形式读取文件中的所有行,你也可以使用 list(f) 或 f.readlines()。

f.write(string) 会把 string 的内容写入到文件中,并返回写入的字符数。

如果是在文本模式下,那么在写入文件之前,需要把对象转换成为文本形式,我们可以使用str()来进行转换。

使用f.seek(offset, whence)可以定位文件指针的位置,然后后续会从该位置开始进行读取操作。

whence 的 0 值表示从文件开头起算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。 whence 如果省略则默认值为 0,即使用文件开头作为参考点。

JSON是一个很方便进行信息交流的文件格式。我们看下怎么使用JSON来将对象转换为字符串:

dumps是将对象转换为json str。 json还有一个dump方法,可以直接将对象存入到文件中。

要从文件中解析出json字符串,可以使用load:

JSON 中的键-值对中的键永远是 str类型的。当一个对象被转化为 JSON 时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。换句话说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x。

os: This module provides a portable way of using operating system dependent functionality.

这个模块提供了一种方便的使用操作系统函数的方法。

os 常用方法

os.remove() 删除文件

os.rename() 重命名文件

os.walk() 生成目录树下的所有文件名

os.chdir() 改变目录

os.mkdir/makedirs 创建目录/多层目录

os.rmdir/removedirs 删除目录/多层目录

os.listdir() 列出指定目录的文件

os.getcwd() 取得当前工作目录

os.chmod() 改变目录权限

os.path.basename() 去掉目录路径,返回文件名

os.path.dirname() 去掉文件名,返回目录路径

os.path.join() 将分离的各部分组合成一个路径名

os.path.split() 返回( dirname(), basename())元组

os.path.splitext() 返回 (filename, extension) 元组

os.path.getatime\ctime\mtime 分别返回最近访问、创建、修改时间

os.path.getsize() 返回文件大小

os.path.exists() 是否存在

os.path.isabs() 是否为绝对路径

os.path.isdir() 是否为目录

os.path.isfile() 是否为文件

Python中的io模块是用来处理各种类型的I/O操作流,主要是文件处理。主要有三种类型的I/O类型:文本I/O(Text I/O),二进制I/O(Binary I/O)和原始I/O(Raw I/O)。它们都是通用类别,每一种都有不同的后备存储。属于这些类别中的任何一个的具体对象称为文件对象,其他常用的术语为流或者类文件对象。