Python 文件 I/O

Python 使用一种叫做文件句柄类型的变量来操作文件

从文件读取或者写入数据需要使用文件句柄

文件句柄 (file handle) 是一个 I/O 连接的名称

Python 内置了丰富的函数用来创建,读写,管理和删除文件

本章节我们就来学习一下这些函数

输出到屏幕 - print 语句

print() 语句是我们最常用到的文件 I/O 语句

print() 语句用于将数据输出到标准输出 ( 屏幕 )

可以给它传递零个或多个用逗号隔开的表达式,他会把传递的表达式转换成一个字符串表达式,并将结果写到标准输出

#!/usr/bin/python
# -*- coding: UTF-8 -*- 

print ('人生苦短,我用 Python')
print "Python 是一个非常棒的语言,不是吗?";

这时我们就可以在屏幕上看到如下结果

人生苦短,我用 Python
Python 是一个非常棒的语言,不是吗?

读取键盘输入 - raw_input() / input() 函数

Python 内置了 raw_input()input() 两个函数用于从标准输入读入一行文本

默认的标准输入是键盘

raw_input() 函数

raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串 ( 去掉结尾的换行符 )

#!/usr/bin/python
# -*- coding: UTF-8 -*- 

str = raw_input("请输入:");
print "你输入的内容是: ", str

prompt 是用于提示用户的语句

运行以上 Python 代码,它会我们输入任意字符串,然后在屏幕上显示相同的字符串

当我们输入 "Hello Python!" 时,它会输出如下信息

请输入:Hello Python!
你输入的内容是:  Hello Python!

input() 函数

input([prompt]) 函数和 raw_input([prompt]) 函数类似,但是 input() 可以接收一个 Python 表达式作为输入,并将运算结果返回

#!/usr/bin/python
# -*- coding: UTF-8 -*- 

str = input("请输入:");
print "你输入的内容是: ", str

运行以上 Python 代码,会产生如下对应着输入的结果

请输入:[x*5 for x in range(2,10,2)]
你输入的内容是:  [10, 20, 30, 40]

打开和关闭文件

上面,我们已经学习了如何使用 print() 、raw_input() 、input() 三个函数读写标准输入输出

接下来我们学习如何读写文件

Python 内置了 file()open() 两个函数用来打开一个文件进行读写

open() 函数

open() 函数会会打开一个文件,创建一个 file 对象,返回一个文件句柄

然后相关的方法就可以使用文件句柄来读写打开的文件了

file_object = open(file_name [, access_mode][, buffering])

参数说明

参数 说明
name 一个包含了你要访问的文件名称的字符串值
mode mode 决定了打开文件的模式:只读,写入,追加等
所有可取值见如下的完全列表
这个参数是非强制的,默认文件访问模式为只读 (r)
buffering 如果 buffering 的值被设为 0,就不会有缓冲
如果 buffering 的值取 1,访问文件时会缓冲
如果将 buffering 的值设为大于 1 的整数,就是缓冲区的大小
如果取负值,缓冲区的大小则为系统默认

下表列出了打开文件的不同模式 ( mode 参数 )

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

File 对象的属性

当我们拥有了一个文件对象的句柄后,我们就可以得到有关该文件的各种信息

下表列出了 file 对象相关的所有属性

属性 描述
file.closed 返回 True 如果文件已被关闭,否则返回 False
file.mode 返回被打开文件的访问模式
file.name 返回文件的名称
file.softspace 如果用 print 输出后,是否同时输出一个空格符,是则返回 True,否则返回 False 。默认为 False

下面的代码输出了一个文件对象的属性

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fp = open("demo.txt", "wb")
print "文件名: ", fp.name
print "是否已关闭 : ", fp.closed
print "访问模式 : ", fp.mode
print "末尾是否强制加空格 : ", fp.softspace

运行以上 Python 代码,输出结果如下 以上实例输出结果:

文件名:  demo.txt
是否已关闭 :  False
访问模式 :  wb
末尾是否强制加空格 :  0

close() 方法

File 对象的 close() 方法用于刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入

当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件

读写完文件就用 close() 方法关闭文件是一个良好的编程习惯

语法

fileObject.close();

下面的代码演示了 fp.close() 方法的使用 例子:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fp = open("demo.txt", "wb")
print "文件名: ", fp.name

# 关闭打开的文件
fp.close()

运行以上 Python 代码,输出结果如下

文件名:  demo.txt

读写文件

file 对象提供了一系列方法,可以让我们轻松简单对文件进行读写

其中最重要的两个方法就是: read()write()

write() 方法

write() 方法用于将任何 Python 字符串写入一个打开的文件

Python 字符串可以是二进制数据,而不是仅仅是文字

需要注意的是:write() 方法不会在字符串的结尾添加换行符 ('\n')

fileObject.write(string);

参数 string 就是要写入到已打开文件的内容

下面的代码使用 write() 方法将 www.twle.cn\nHello 写入文件 demo.txt

例子:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fo = open("demo.txt", "wb")
fp.write( "www.twle.cn\nHello");

# 关闭打开的文件
fp.close()

运行以上 Python 代码,打开 demo.txt 文件可以看到如下内容

$ cat demo.txt 
www.twle.cn
Hello

read() 方法

read() 方法从一个打开的文件中读取一个字符串

读取的内容可以是文本内容,也可以是二进制输出,这取决于原本文件内容的存储格式

fileObject.read([count]);

参数 count 用于设置要从已打开文件中读取的字节计数

read() 方法会从当前的文件指针 ( 刚打开的文件就是从头开始 ) 开始读入

如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾

范例

假设存在文件 demo.txt 文件内容如下

www.twle.cn
Hello

下面的代码从 demo.txt 文件中读取 12 个字节的内容

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fp = open("demo.txt", "r+")

str = fp.read(12);

print "读取的字符串是 : ", str

# 关闭打开的文件
fp.close()

运行以上 Python 代码,输出结果如下

读取的字符串是 :  www.twle.cn

文件定位

文件游标

文件游标就是当前文件读到哪里或写到哪里了,比如下图

文件游标类似于我们看到的光标

比如上图中文件游标就是 6 (游标从 0 开始 )

tell() 方法

tell() 方法用于显示当前文件对象的游标的位置

换句话说,下一次的读写会发生在文件开头这么多字节之后

fileObject.tell()

seek() 方法

seek() 方法用于改变当前文件的游标位置

seek ( offset [,from] )

参数 offset 变量用于设置要移动的字节数

参数 from 用于设置开始移动字节的参考位置

  1. 如果 from 被设为 0,这意味着将文件的开头作为移动字节的参考位置
  2. 如果设为 1,则使用当前的位置作为参考位置
  3. 如果它被设为 2,那么该文件的末尾将作为参考位置

范例

假设存在文件 demo.txt 文件内容如下

www.twle.cn
Hello

下面的代码演示了 tell() 和 seek() 两个方法的使用

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fp = open("demo.txt", "r+")
str = fp.read(10);
print "读取的字符串是 : ", str

# 查找当前位置
position = fp.tell();
print "当前文件位置 : ", position

# 把指针再次重新定位到文件开头
position = fp.seek(0, 0);
str = fp.read(10);
print "重新读取字符串 : ", str
# 关闭打开的文件
fp.close()

运行以上 Pyhton 代码,输出结果如下

读取的字符串是 :  www.twle.c
当前文件位置 :  10
重新读取字符串 :  www.twle.c

重命名和删除文件

Python 的 os 模块提供了针对系统文件的处理方法,比如重命名和删除文件

导入 os 模块

要使用这个模块,就必须先导入它,然后才可以调用相关的各种功能

import os

os.rename() 方法

os.rename() 用于重命名一个文件

os.rename(current_file_name, new_file_name)

参数 current_file_namenew_file_name 分别表示当前的文件名和新文件名

下面的代码将一个已经存在的文件 demo1.txt 重命名为 demo2.txt

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 重命名文件 demo1.txt 到 demo2.txt
os.rename( "demo1.txt", "demo2.txt" )

remove()方法

os.remove() 方法用于删除一个文件

os.remove(filename)

参数 filename 为要删除的文件路径

下面的代码使用 os.remove() 方法删除当前目录下的 demo2.txt 文件

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 删除一个已经存在的文件 demo2.txt
os.remove("demo2.txt")

Python 目录 I/O

所有文件都包含在各个不同的目录下

Python 在 os 模块里提供了操作目录的各种函数,包括创建,删除和更改目录

mkdir()方法

os.mkdir() 方法用于创建一个新的目录

os.mkdir( newdir )

如果参数 newdir 是相对路径,那么将相对于当前目录创建新的目录

下面的代码使用 os.mkdir() 在当前目录下创建一个新的目录 newdir

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 创建目录 newdir
os.mkdir("newdir")

chdir() 方法

os.chdir() 方法用于更改当前的工作目录

唯一的参数就是想设成工作目录的目录名称

os.chdir( destdir )

下面的代码将当前工作目录更改为上面创建的 newdir 目录下

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 将当前目录改为 "newdir"
os.chdir("newdir")

getcwd() 方法

os.getcwd() 方法用于显示当前的工作目录

os.getcwd()

下面的代码输出当前的工作目录

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 给出当前的目录
print os.getcwd()

rmdir() 方法

os.rmdir() 方法用于删除一个目录

os.rmdir('dirname')

唯一的参数就是想要删除的目录路径

如果给出目录路径是相对路径,那么会在当前目录下搜索该目录

注意: 在删除这个目录之前,它的所有内容 (文件) 应该先被清除

下面的代码用户删除上面创建的 newdir 目录

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 删除 "newdir" 目录
os.rmdir( "newdir"  )

Python 文件/目录相关的方法

Python2 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.