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:将一个文件的所有单词倒序写入文件中

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 文件打开方法: open(name,mode,buf) name:文件路径 mode:打开方式 文件读取方式: r...
    江魁阅读 574评论 0 0
  • python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。 得到当前工作目录,即当前...
    Brise阅读 634评论 0 1
  • 搜索887934385交流群,进入后下载资料工具安装包等。最后,感谢观看! 总是记不住API。昨晚写的时候用到了这...
    番茄番茄你个西红柿_ff1b阅读 203评论 0 0
  • 总是记不住API,整理一下: python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模...
    时尚灬IT男阅读 679评论 0 3
  • python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。 得到当前工作目录,即当前...
    23b813a14221阅读 266评论 0 0