Python(2.7)-文件操作(file)

摘要:
您可以使用文件对象3.1.1执行大多数文件操作。打开文件3.1.1.1open()Python有一个内置的文件打开函数Open(),用于打开文件并创建文件对象。然后,您可以对打开的文件fp=open:file_ name变量是一个字符串值,其中包含要访问的文件路径和文件名_ Mode:确定打开文件的模式,包括只读、写入、追加等。

3.1文件操作(files)

              Python提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用file对象做大部分的文件操作       

3.1.1打开文件

3.1.1.1 open()

            Python内置了一个打开文件的函数open(),用来打开一个文件,创建一个file对象,然后你就可以对该打开的文件做任何你想做的操作

            fp=open(file_name[,access_mode][,buffering]):file_name变量是一个包含了你要访问的文件路径及文件名称的字符串值,access_mode:决定了打开文件的模式,是只读、写入、追加等等。这是个非强制参数,默认文件访问模式为只读(r);buffering也是一个非强制性参数,如果buffering的值被设置为0,就不会有缓存;如果值为1,访问文件时会有缓存行;如果值为大于1的整数,表明了这就是寄存区的缓冲大小,如果取负数值,寄存区的缓存大小则为系统默认。

            如果以只读(r)模式打开一个不存在的文件,会报IOError异常,如果是以写或者追加模式打开一个不存在的文件,默认会创建该文件,如果所在路径中有目录不存在,也会报IOError异常

代码示例:在d盘目录下打开/创建一个newfile.txt文本文件,并写入goodmorning,然后关闭文件

>>> fp=open("d:\newfile.txt","w") #以写的方式打开文件

>>> fp.write("goodmorning")    #写入内容

>>> fp.close()              关闭文件#

>>> 

执行结果:

代码示例2:将刚刚写入的文件内容读取出来

>>> fp=open("d:\newfile.txt","r")    #以只读的方式打开文件

>>> print fp.readline()               #读出内容 

goodmorning

>>> fp.close()                   #关闭文件

>>> 

3.1.1.2 with open(file_name[,access_mode])

         with open(file_name[,access_mode]):open用法基本一致,区别在于用with方法打开文件,会默认关闭文件

>>> with open("d:\newfile.txt") as fp:

...     for line in fp:

...         print line

...

goodmorning

3.1.2 文件操作模式

       r:只读,文件的指针会放在文件的开头,从开头开始读取文件内容,这是文件的默认打开方式

 

       w:覆盖式写入,如果文件存在,则将文件中的全部内容清空然后写入,如果文件不存在,创建文件

 

       a:追加式写入,从文件的末尾开始写入,如果文件不存在,创建文件

 

       文件对象:一个文件被打开后,你就会得到一个file对象,然后就可以得到有关该文件的各种信息。

>>> fp=open("d:\newfile.txt","r")

>>> fp.closed      #如果文件已经关闭,返回TRUE,否则返回False

False

>>> fp.mode      #返回被打开文件的访问模式

'r'

>>> fp.name      #返回文件的名称

'd:\newfile.txt'

>>> fp.softspace   #末尾是否强制加空格     

0

>>> fp.close()

>>> fp.closed

True

>>> 

3.1.3 文件常用操作方法

3.1.3.1 fp.read([size])

       fp.read([size]):size为读取的长度,以byte为单位,如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个” ”符号

>>> fp=open("d:\newfile.txt","r")

>>> content=fp.read(5)

>>> print content

goodm

>>> fp.close()

>>> 

3.1.3.2 fp.readline([size])

  fp.readline([size]):只读取一行,size为读取的长度,以byte为单位,如果给定了size,有可能返回的只是一行的一部分,如果不指定参数,表示一次性读取一行,以字符串形式返回,结尾会有一个” ”符号,读完一行,文件操作标记移动到下一行的开头,下次读取时,从下一行的开头开始

示例:按行读取,每读取一行,都会有一个/n符号

>>> fp=open("d:\newfile.txt","r")

>>> for i in range(3):

...     a=fp.readline()

...     print a

...

goodmornin

my name is pangwei

one two three fore five six

>>> fp.close()

>>> 

示例:按长度读取,一行读完之后/n符号会独占一行,之后会再换一行

>>> fp=open("d:\newfile.txt","r")

>>> for i in range(4):

...     a=fp.readline(5)

...     print a

...

goodm

ornin

my na

>>> fp.close()

>>> 

3.1.3.3 fp.readlines([size])

  fp.readlines([size]):把文件的每一行作为一个list的元素,是一个结尾有的字符串,如果指定了size参数,表示读取文件指定内容的长度,此时就有可能只能读取文件的一部分

>>> fp=open("d:\newfile.txt","r")

>>> a=fp.readlines()

>>> print a

['goodmornin ', 'my name is pangwei ', 'one two three fore five six']

>>> for i in a:

...     print i

...

goodmornin

my name is pangwei

one two three fore five six

>>> 

3.1.3.4 fp.write(str)

  fp.write(str):把str写入到文件中,默认是不加换行符的,换行需要手动加入换行符” ”.

>>> fp=open("d:\newfile.txt","w")

>>> fp.write("pangwei is a sunny big boy"+" ")

>>> fp.close()                 

>>>             

  fp.writelines(seq):把序列seq的内容全部写入到文件中(多行一次性写入)。不会自动加入换行符;注意:seq中的内容也必须是字符串类型的数据,才能成功写入文件

>>> seq=["pangwei ","is ","a ","boy ","测试文件"]

>>> fp=open("d:\newfile.txt","w")

>>> fp.writelines(seq)

>>> fp.close()

>>> 

  fp.close():文件对象的close()方法刷新缓冲区里任何还没有写入的信息,并关闭该文件。用close关闭文件是一个很好的习惯,文件关闭之后不能再对文件进行操作,但是如果文件不及时关闭,有可能产生句柄泄露,丢失数据

 

  fp.flush():此函数将缓冲区中的内容写入硬盘

  fp.next():返回文件的下一行内容,并将文件操作标记位移动到下一行,把一个文件(flie)for i in file这样的循环遍历语句时,就是调用next()函数来实现。

>>> fp=open("d:\newfile.txt","r")

>>> fp.next()

'pangwei '

>>> fp.next()

'is '

>>> fp.close()

>>> 

  fp.tell():返回文件操作标记的当前位置,以文件开头为基准点

>>> fp=open("d:\newfile.txt","r")

>>> fp.tell()

0L

>>> fp.readline()

'pangwei '

>>> fp.tell()

9L

>>> fp.readline()

'is '

>>> fp.tell()

13L

>>>fp.close()

>>> 

 

  fp.seek(offset[,from]):这是一个文件定位函数,该方法改变当前文件的位置。offset变量表示要移动的字节数,from遍历指定开始移动字节的参考位置。如果from被设置为0(默认值),意味着将文件开头作为移动字节的参考位置;1表示使用当前位置作为参考位置;2表示使用文件的末尾作为参考位置。注意:如果使用a或者a+的模式打开文件,文件的标记会自动返回到文件末尾

>>> fp=open("d:\newfile.txt","r")

>>> fp.readline()

'pangwei '

>>> fp.seek(0,0)

>>> fp.readline()

'pangwei '

>>> fp.readline()

'is '

>>> fp.close()

>>> 

  fp.truncate([size]):把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置,如果size比文件的大小还要大,根据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

>>> fp=open("d:\newfile.txt","r+")

>>> fp.readline()  #读出了文件第一行的内容

'pangwei '

>>> fp.truncate()    #从当前位置(第二行开头)开始裁,后边的内容全部裁掉了

>>> fp.readline()  #读取到后边的内容为空

''

>>> fp.close()

>>>

3.1.3 linecache模块

       linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。

       linecache.getlines(file_name):读出文件中所有的行,输出为列表格式,每一行作为一个元素,以linenum-1为元素索引位置存储

代码示例1:绝对路径读取文件内容

>>> import linecache

>>> linecache.getlines("d:\newfile.txt")

['pangwei ', ' ', 'pangwei is a boy ', 'hello world! ']

代码示例2:相对路径读取文件内容

>>> import linecache

>>> import os

>>> os.chdir("d:\")

>>> os.getcwd()

'd:\'

>>> linecache.getlines("newfile.txt")

['pangwei ', ' ', 'pangwei is a boy ', 'hello world! ']

>>> 

    linecache.getline(file_name,lineno):读出文件中第lineno行;这个函数不会抛出异常,如果产生错误,他将返回’’(换行符将会包含在找到的行里)

>>> import linecache

>>> linecache.getline("newfile.txt",5)

''

>>> linecache.getline("newfile.txt",4)

'hello world! '

>>> 

    linecache.clearcache([file_name]):清除缓存,file_name是一个非强制参数,表示清除指定文件的缓存

    linecache.checkcache([file_name]):检查缓存的有效性,如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,是一个非强制参数,不传递此参数,将检查缓存里的所有条目

    linecache.updatecache([file_name]):更新缓存,如果file_name文件更新了,使用这个函数可以更新linecache.getlines(file_name)返回的列表,如果出错,则返回空列表

 

练习:删除文件中的空行

#encoding=utf-8

import os

def DelBlankLine(infile,outfile):

    infp=open(infile, "r")

    outfp=open(outfile, "w")

    lines =infp.readlines()

    for i in lines:

        if i==' ':  #不同操作系统下换行符可能会有不同

            print u"此行是空行"

        if i.split():   #去除纯空格或者其他不可见字符的行

            outfp.write(i)

    infp.close()

    outfp.close()

#print DelBlankLine("d:\newfile.txt","d:\newfile1.txt")

3.1.4 cPickle模块(序列化)

         Python提供一个标准的模块,称为picklecPickle模块的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快的多(cPicklepickle1000倍);使用它可以在一个文件中存储任何Python对象,比如列表,字典等,之后你又可以把它完整无缺的取出来,这被称为持久的存储对象(序列化)

#encoding=utf-8

import cPickle as p

shoplist=["apple","banner","mango"]

fp=open("d:\python\shoplist.txt","w")

p.dump(shoplist,fp)     #将列表对象dump到文件中

fp.close()

fpout=open("d:\python\shoplist.txt","r")

storedlist=p.load(fpout)    #从文件中取出之前的列表

print u"从文件中读取的列表对象:",storedlist

免责声明:文章转载自《Python(2.7)-文件操作(file)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前台开发—-实现商品添加到购物车注解之----@WebService下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python基础-6 字典相关练习题

写代码:有如下字典按照要求实现每一个功能dict = {"k1":"v1","k2":"v2","k3":"v3"} 1、请循环遍历出所有的key 1 dict = {"k1":"v1","k2":"v2","k3":"v3"} 2 3 #1、请循环遍历出所有的key 4 for k in dict: 5 print(k) View Code...

es查询示例

1. 建立连接 from elasticsearch import Elasticsearch es = Elasticsearch(["localhost:9200"]) 2. 查询所有数据 # 方式1: es.search(index="index_name", doc_type="type_name") # 方式2: body...

python中如何调用.py文件

这里分为两种情况。 一、在python的安装目录下 直接在IDLE中输入from 文件名 import *命令即可。 注意new1.py文件中内容,有print语句。 二、未在python的安装目录下 使用命令为: 1.import sys #引入sys库体,python的信息模块 2.sys.path.append("路径") #系统路径中填写存放....

Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识

本节内容 JavaScript 正则表达式 Django初识 正则表达式 1、定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配 JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m模式也会使用^$来匹配换行的内容) 1 var pattern...

python 多进程

1.进程的创建 frommultiprocessing import Process import time,os def Hi(name): time.sleep(3) print("Hello %s" %name,time.ctime()) print("进程号是 ",os.getpid()) if __name__=="__...

SUSE 12 安装 python3.6

步骤(一定要按照下面给出的顺序安装,不要问我为什么,因为我踩的坑有土星那么大):   安装 zlib-1.2.11.tar.gz       下载地址:https://files.cnblogs.com/files/SBJBA/zlib-1.2.11.tar.gz       tar -xzvf zlib-1.2.11.tar.gz       ./con...