python的使用方法-Python的文件open()方法使用详解

标签:

Python内置了一个open()方法,用于对本地文件进行读写操作。这个功能简单、实用,属于必须掌握的基础知识。

使用open方法操作文件可以分三步走,一是打开文件,二是操作文件,三是关闭文件。下面分别介绍:

一、打开文件

其基本语法:f = open("文件名","打开模式")

打开模式:

r   只读    默认模式,如果文件不存在就报错,存在就正常读取。

w  只写    如果文件不存在,新建文件,然后写入;如果存在,先清空文件内容,再写入。

a  追加    如果文件不存在,新建文件,然后写入;如果存在,在文件的最后追加写入。

x  只写    如果文件存在则报错,如果不存在就新建文件,然后写入内容,比w模式更安全。python3以上新增。

+  读写模式  比如r+ w+ a+     (下文详细说明)

b  二进制模式 比如rb  wb  ab     这个和bytes类型、字符串类型有关系(下文详细说明)

还有r+b  w+b  a+b的组合模式,不在一一列举

特别强调:

1. b模式:二进制模式,也就是01010101之类的比特流。需要特别注意,它在读写的时候是以字节类型(bytes)读写的,因此获得的是一个字节对象而不是字符串。在这个读写过程中,需要自己指定字节类型的编码格式。以write()方法为例进行说明,read()方法也是同样的。

s = "this is a test"b= bytes(s,encoding="utf-8")

f= open("test.txt","w")

f.write(s)##这样没问题,正常写入了文件。

##-------------------------------------------------

s = "this is a test"b= bytes(s,encoding="utf-8")

f= open("test.txt","wb") ##注意多了个b

f.write(s)##报错

TypeError: a bytes-like object is required, not "str"

##意思是它需要一个bytes类型数据,你却给了个字符串

##---------------------------------------------------

s = "this is a test"b= bytes(s,encoding="utf-8")

f= open("test.txt","wb") ##注意多了个b

f.write(b) ##将变量b传给它,b是个bytes类型

##成功执行!

因此,在使用带b的模式时一定要注意传入的数据类型。没有b以字符为单位进行读写,有b则以字节为单位读写。

2. +模式: 对于w+,事实上这种模式,在读写之前都会清空你文件内容,请不要使用!

对于a+模式,事实上这种模式,你永远只能在文件的末尾写入,有局限性,请不要使用!

对于r+模式,相对来说最好的读写模式,配合seek()和tell()方法,可以实现大部分操作。

二、文件操作方法

在Python3中,基本的文件操作方法有:

classTextIOWrapper(_TextIOBase):def close(self, *args, **kwargs):

关闭文件pass

def fileno(self, *args, **kwargs):

文件描述符pass

def flush(self, *args, **kwargs):

刷新文件内部缓冲区pass

def isatty(self, *args, **kwargs):

判断文件是否是同意tty设备pass

def read(self, *args, **kwargs):

读取指定字节数据pass

def readable(self, *args, **kwargs):

是否可读pass

def readline(self, *args, **kwargs):

仅读取一行数据pass

def seek(self, *args, **kwargs): #指定文件中指针位置pass

def seekable(self, *args, **kwargs):

指针是否可操作pass

def tell(self, *args, **kwargs):

获取指针位置pass

def truncate(self, *args, **kwargs):

截断数据,仅保留指定之前数据pass

def writable(self, *args, **kwargs):

是否可写pass

def write(self, *args, **kwargs):

写内容pass

def __getstate__(self, *args, **kwargs):pass

def __init__(self, *args, **kwargs):pass@staticmethoddef __new__(*args, **kwargs): #real signature unknown

"""Create and return a new object. See help(type) for accurate signature."""

pass

def __next__(self, *args, **kwargs):"""Implement next(self)."""

pass

def __repr__(self, *args, **kwargs):"""Return repr(self)."""

passbuffer= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

closed= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

encoding= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

errors= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

line_buffering= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

name= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

newlines= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

_CHUNK_SIZE= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

_finalizing= property(lambda self: object(), lambda self, v: None, lambda self: None) #default

其中,真正重要的,用得着的是read、readline、readlines、write、tell、seek、flush、close这几个方法。请注意,没有直接修改文件内容的方法。下面介绍一下这几个重点方法:

1.read():可指定一次读取的数量,比如f.read(10)。如果打开模式没有b,则read的时候以字符为单位进行读取,有b则以字节为单位读取。

2.write():如果打开模式没有b,则接受普通的字符串为参数;如果有b则需要传入bytes类型的对象。

3.readline():读入一行,如果打开模式没有b,则返回一行字符串;如果有b,则返回bytes类型。可以指定数量参数。

4.readlines():将所有文件按行读入,如果打开模式没有b,则返回由各行字符串为元素组成的列表;如果有b,则返回由各行的bytes类型组成的列表。可以指定数量参数。

5.tell():在打开的文件中,维持着一个位置指针,默认刚开始处于文件的顶端,也就是0位置,在读的过程中,读走多少,指针就移动多少,并且它永远是以字节为单位进行计数。因此在使用时一定要注意编码的问题,否则容易造成读写的乱码。tell方法可以获取当前指针的位置,使用方法,f.tell()。

6.seek():将指针指向指定的下标处,与tell配合使用,单位是字节。使用方法,f.seek(5)。

7.flush():将刚写入的内容刷新到本地文件。默认情况下,在文件关闭后,缓存内的数据才会写入本地文件,这样可能会造成数据访问不一致。

三、关闭文件

为了防止资源泄露,文件破坏,在每次对文件做完操作,我们都要关闭文件。它很简单,文件句柄.close()就可以。

四、with—上下文管理器

Python的with语法非常棒,它能帮你自动关闭打开的文件,不需要你手动调用close()方法。

with的基本使用方式如下:

with open("test.txt","w") as f:

f.write("str")

而且在2.7以后的版本中,它还支持同时打开多个文件。

withopen("log1") as obj1,open("log2") as obj2:

pass

with不但能管理文件,还能管理别的对象。

五、文件的迭代

当文件被打开后,可以对文件进行逐行迭代:

for line in f:

pass

标签:

原文地址:http://www.cnblogs.com/feixuelove1009/p/5521861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值