python--文件操作

文件操作:

打开文件:
    Python内置了一个打开文件的函数,open()函数,用来打开一个文件,返回新打开文件的描述符,然后就可以对该打开的文件做任何你想做的操作。

语法:File_object= open(file, mode='r', buffering=-1, encoding=None,errors=None, newline=None, closefd=True, opener=None)

➢ file:文件名称。

➢mode:制定了文件打开的方式,函数提供了如下方式,其中,'rt'为默认方式。

➢ buffering:如果buffering的值被设置为0,就不会有缓存;如果值为1,访问文件时会缓存行;如果值位大于1的整数,表明了这就是寄存区的缓冲

大小;如果取负值,寄存区的缓冲大小则为系统默认。该参数也是非强制性的。

➢encoding:编码或者解码方式。默认编码方式依赖平台,如果需要特殊设置,可以参考codecs模块,获取编码列表。

➢ errors:可选,并且不能用于二进制模式,指定了编码错误的处理方式,可以通过codecs.Codec获得编码错误字符串

➢mode:制定了文件打开的方式,函数提供了如下方式,其中,'rt'为默认方式。

➢newline:换行控制,参数有:None,'\n','\r','\r\n'。输入时,如果参数为None,那么行结束的标志可以是:'\n','\r','\r\n'任意一个,并且三个控制符都首先会被转化为:'\n',然后才会被调用;如果参数为'',所有的通用的换行结束标志都可以用,但是行结束标识符返回调用不会被编码。输出时,如果参数为None,那么行结束的标志可以是:'\n'被转换为系统默认的分隔符;如果是'','\n'则不会被编码。

➢closefd:false:文件关闭时,底层文件描述符仍然为打开状态,这是不被允许的,所以,需要设置为ture

➢opener:可以通过调用*opener*方式,使用自定义的开启器。底层文件描述符是通过调用*opener*或者*file*, *flags*获得的。

➢*opener*必须返回一个打开的文件描述。将os.open作为*opener*的结果,在功能上,类似于通过None。

打开方式一:

代码示例:

fp = open( "c:\\downloads\\ip1.txt",'w+')    --python内打开文件

print(type(fp))  

print (fp)

fp.write("glory road is great!")    --文件内写入内容

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

打开方式二:

with 方式打开文件:会默认关闭文件

代码示例:

with open("c:\\downloads\\ip1.txt",'r’) as f:

    for line in f:    --打开文件内置循环,浏览所有内容

        print (line)    

文件操作模式:

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

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

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

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

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

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

文件对象:

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

file.mode    --返回被打开文件的访问模式。

file.name    --返回文件的名称。

代码示例:

fp = open( "c:\\downloads\\ip1.txt",'w')

print ("文件是否关闭:", fp.closed)

print ("文件的访问模式:", fp.mode)

print ("文件名称:", fp.name)

fp.close()

文件操作常用方法:

一、fileObject.read([size])

size为读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。

代码示例1:

fp = open( "c:\\ file.txt",'r')

content = fp.read()

print ("读取的文件内容如下:\n",content)

fp.close()

代码示例2:

fp = open( "c:\\file.txt",'r')

content = fp.read(5)

print ("读取的文件内容如下:\n", content)

fp.close()

二、fileObject.read([size])

size为读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。

代码示例1:

fp = open( "c:\\ file.txt",'r')

content = fp.read()

print ("读取的文件内容如下:\n",content)

fp.close()

代码示例2:

fp = open( "c:\\file.txt",'r')

content = fp.read(5)

print ("读取的文件内容如下:\n", content)

fp.close()

三、fileObject.readline( [size] )

一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返回,并且结尾会有一个换行符"\n"。读完一行,文件操作标记移动到下一行的开头。

代码示例1:

fp = open( "c:\\file.txt",'r')

content = fp.readline()

print ("读取的文件内容如下:\n", content)

fp.close()   

代码示例2:

fp = open( "c:\\file.txt",'r')

content = fp.readline(5)

print ("读取的文件内容如下:\n", content)

fp.close()

四、fileObject.readlines( [size] )

把文件每一行作为一个list的一个成员,是一个字符串,并且结尾会有一个换行符"\n",并返回这个list。这个函数的内部是通过循环调用readline()来实现的。如果指定了size参数,表示读取文件指定内容的长度,此时就有可能只能读取文件的一部分,并且结尾会有一个换行符"\n"。

注:指定很小的数字,会不生效,python 默认8k缓存区大小,需要大于8k生效

代码示例:

fp = open( "c:\\file.txt",'r')

contentList = fp.readlines()

print ("读取文件的内容:\n", contentList)

for i in contentList :

print (i)

fp.close()

五、fileObject.write( str )

把str写到文件中,默认是不加换行符的,所以如果想换行的话,得手动加入换行符'\n'。

代码示例:

fp = open( "c:\\test.txt",'w')

fp.write('文件写入测试' + '\n')

fp.close()

六、fileObject.writelines( seq )

把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符。

代码示例:

testList = ['abcede\n', '123\n', 'this is a test', '文件操作']

fp = open( "c:\\test.txt",'w')    --打开文件准备写文件

fp.writelines( testList )    --将列表testList所有内容一次全部写入文件

fp.close()

注意:序列中的内容也必须是字符串类型的数据,才能成功写入文件。

七、fileObject.flush()

该函数是将缓冲区中的内容写入硬盘。

代码示例:

testList = ['test1\n', 'test2\n', 'test3', '文件操作']

fp = open( "c:\\downloads\\ip2.txt",'w+')


print (fp.read(),end="\n")

fp.writelines(testList)

fp.flush()

fp1 = open( "c:\\downloads\\ip2.txt",'r')

print (fp1.read(),end="\n")

fp.close()

fp1.close()

八、fileObject.fileno()

返回一个长整型的文件标签。

代码示例:

fp = open( "c:\\test.txt",'r')

print (fp.fileno())

fp.close()

九、fileObject.isatty()

文件是否是一个终端设备文件(unix)系统中的。

代码示例:

fp = open( "c:\\test.txt",'r')

print (fp.isatty())

fp.close()

十、fileObject.tell()

返回文件操作标记的当前位置,以文件的开头为基准点。

代码示例:

fp = open( "c:\\test.txt",'r')

print ("当前文件操作标记位置为:", fp.tell() )

line = fp.readline()

print ("读取一行后文件操作标记位置为:", fp.tell())

fp.close()

十一、fileObject.seek( offset[, from ] )

tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。seek(offset [,from])这是一个文件定位函数,该方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0(默认值),这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。测试文件test.txt,内容如下:

代码示例:

fp = open(r"c:\test.txt", "r+")

str = fp.read(16)    --读取长度为16个字节的内容

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

position = fp.tell()    --查找当前位置

print ("当前文件位置 : ", position)

position = fp.seek(0, 0)    --把指针再次重新定位到文件开头

str = fp.read(16)

print ("重新读取字符串 : ", str)

fp.close()

删除空行的方法:

方法1:

import os

def delblankline(infile, outfile):

    """ Delete blanklines of infile """

    infp = open(infile, "r")

    outfp = open(outfile, "w")

    lines = infp.readlines()

    for li in lines:

        if li.split():

            outfp.write(li)

    infp.close()

    outfp.close()

方法2:

fp = open(r'test.txt')

aList = []

for item in fp:

    if item.strip():

        aList.append(item)

fp.close()

fp = open(r'test2.txt','w')

fp.writelines(aList)

fp.close()

文件操作练习题

文件内容:

glory road ,wu lao shi

file,haha

women, man, love

练习题1:同时读写文件

练习题2:创建一个空文件

练习题3:读取文件的前两行

练习题4:读取文件的奇数行

练习题5:在文件中写入一个列表的内容

练习题6:在文件中的0、2、4位置写入当前的文件位置偏移量

练习题7:with写法读取文件内容

练习题8:统计一个文件中单词个数

练习题9:将一个文件的所有单词倒序写入文件中

你可能感兴趣的:(python--文件操作)