Python 文件操作

前言

文件的读写在软件开发中也会经常用到,Python 对文件的支持也很强大,所以今天讲讲如何用 Python 来操作文件。

打开/关闭

open

打开文件很简单,只需要执行:

1

open('file_name', 'r')

第一个参数是文件路径,第二个参数是权限(如不指定权限,则默认为 r)。

权限说明:

访问模式

说明

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

rwa 是指对文本文件的操作。 rbwbab 是指对二进制文件的操作。

r+w+ 的区别在于如果 r+ 对应的文件不存在,则会报错,而 w+ 会创建这个文件。

close

打开完文件后,一般都要进行关闭,这是一种良好的编程习惯。

12

f = open('g:/3.txt','r')f.close()

File 对象

常用属性

一个文件被打开后,你有一个 file 对象,你可以得到有关该文件的各种信息。 以下是和 file 对象相关的所有属性的列表:

属性

描述

file.closed

返回true如果文件已被关闭,否则返回false。

file.mode

返回被打开文件的访问模式。

file.name

返回文件的名称。

file.softspace

如果用print输出后,必须跟一个空格符,则返回false。否则返回true。

123456789

#!/usr/bin/python# -*- coding: UTF-8 -*- # 打开一个文件fo = open("foo.txt", "wb")print "文件名: ", fo.nameprint "是否已关闭 : ", fo.closedprint "访问模式 : ", fo.modeprint "末尾是否强制加空格 : ", fo.softspace

输出结果:

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

read

read() 方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python 字符串可以是二进制数据,而不是仅仅是文字。 语法:

1

fileObject.read([count]);

在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入 count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾

例子: 这里我们用到以上创建的 foo.txt 文件。

123456789

#!/usr/bin/python# -*- coding: UTF-8 -*- # 打开一个文件fo = open("foo.txt", "r+")str = fo.read(10);print "读取的字符串是 : ", str# 关闭打开的文件fo.close()

以上实例输出结果:

读取的字符串是 :  www.runoob

关于文件读取还有两个方法:

  • readline() :一次读取一行。
  • readlines():读取每行内容到 List 中

write

write() 方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python 字符串可以是二进制数据,而不是仅仅是文字。 write() 方法不会在字符串的结尾添加换行符(\n): 语法:

1

fileObject.write(string);

在这里,被传递的参数是要写入到已打开文件的内容。 例子:

123456789

#!/usr/bin/python# -*- coding: UTF-8 -*- # 打开一个文件fo = open("foo.txt", "wb")fo.write( "www.runoob.com!\nVery good site!\n"); # 关闭打开的文件fo.close()

上述方法会创建foo.txt文件,并将收到的内容写入该文件,并最终关闭文件。如果你打开这个文件,将看到以下内容:

123

$ cat foo.txt www.runoob.com!Very good site!

文件定位

tell() 方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。

seek(offset [,from]) 方法改变当前文件的位置。Offset 变量表示要移动的字节数。From 变量指定开始移动字节的参考位置。 如果 from 被设为 0,这意味着将文件的开头作为移动字节的参考位置。如果设为 1,则使用当前的位置作为参考位置。如果它被设为 2,那么该文件的末尾将作为参考位置。

例子: 就用我们上面创建的文件 foo.txt

123456789101112131415161718

#!/usr/bin/python# -*- coding: UTF-8 -*- # 打开一个文件fo = open("foo.txt", "r+")str = fo.read(10);print "读取的字符串是 : ", str # 查找当前位置position = fo.tell();print "当前文件位置 : ", position # 把指针再次重新定位到文件开头position = fo.seek(0, 0);str = fo.read(10);print "重新读取字符串 : ", str# 关闭打开的文件fo.close()

以上实例输出结果:

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

更多…

File 对象更多方法

os 模块

Python 的 os 模块提供了帮你执行文件操作的方法,几乎所有对文件的操作需求,都可以满足。 要使用这个模块,你必须要先导入它,然后才能调用相关的功能,调用只需要在程序上 import os 后就可以使用了。

rename

1

os.rename(current_file_name, new_file_name)

remove

1

os.remove(file_name)

mkdir

1

os.mkdir("newdir")

chdir

1

os.chdir("newdir")

可以用 chdir() 方法来改变当前的目录。chdir() 方法需要的一个参数是你想设成当前目录的目录名称。

rmdir

1

os.rmdir('dirname')

rmdir() 方法删除目录,目录名称以参数传递。在删除这个目录之前,它之中的所有内容应该先被清除。

更多…

OS 模块更多方法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java成神之路

Java微信开发_03_使用测试号进行开发

今天进行自定义菜单的开发时,发现公众号没有自定义菜单的权限。于是想到用测试号,但微信服务器如何区分你要请求的是公众号还是测试号呢。

813
来自专栏Python小屋

Python自定义类支持with关键字

在任何语言中,文件操作都要遵循打开文件-操作文件-关闭文件,数据库操作也要遵循打开数据库连接-操作数据库-关闭数据库连接,网络编程中很多也具有同样的约定。下面的...

38213
来自专栏GreenLeaves

Oracle 通过数据字典查询系统信息

简介:数据字典记录了数据库系统的信息,他是只读表和视图的集合,数据字典的所有者是sys用户。注:用户只能在数据字典上执行查询操作,而维护和修改是由系统自己完成的...

1985
来自专栏闵开慧

centos中tree插件的使用与注意事项

1 tree的安装 yum -y install tree 使用时直接输入tree 目录名,即可显示该目录的树形结构,示例如下: ? 这样查看目录结构一目了然,...

2868
来自专栏JetpropelledSnake

Python入门之面向对象module,library,package之间区别

背景 Python中有一些基本的名词,很多人,尤其是一些初学者,可能听着就很晕。 此处,简单总结一下,module,library,package之间的大概区别...

31611
来自专栏蓝天

Exception in thread "main" java.lang.Error: Unresolved compilation problem

初学java,使用eclipse编译时,可能会遇到如下图所示的编译错误(Exception in thread "main" java.lang.Error:...

2810
来自专栏深度学习之tensorflow实战篇

pycharm 之模块与模块引用

首先在pycharm,创建文件的快捷键ALT+INS,可以将自己常用的模版导入 ? 其次函数的模块调用规则如下图 ? 模块引用并指导源文...

3699
来自专栏Hongten

python开发_filecmp

filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单。python标准库还提供了difflib模块用于比较文件的内容。关于diffl...

1082
来自专栏osc同步分享

hibernate 中对象的状态

load() 和 get() User user = session.get(User.class, "1"); 如上调用get方法后,会向数据库查询id为1的...

3005
来自专栏Small Code

【Python】numpy 中的 copy 问题详解

这篇文章本是我在 segmentfault 上的一个回答,但是越来越觉得有必要单独拿出来,毕竟这个问题挺常见的。具体可参看 numpy 官方文档 。 正文 nu...

21810

扫码关注云+社区

领取腾讯云代金券