1、常用函数:
fileObject.read([size])
size为读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部
内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。
代码示例1:with open("text.txt","r") as pf:content = pf.read()print content
结果:
abcede
123
this is a test文件操作jfedcba
代码示例2:
with open("text.txt","r") as pf: content = pf.read(2) print content
结果:
读取:ab
fileObject.readline( [size] )
一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返
回,并且结尾会有一个换行符"\n"。读完一行,文件操作标记移动到下一行的
开头
列题1
with open("text.txt","r") as pf: content = pf.readline() print content
结果:
大学之道,在明明德,在亲民,在止于至善。
列题 1:
with open("text.txt","r") as pf: content = pf.readline(15) print content
结果:
大学之道,
fileObject.readlines( [size] )
把文件每一行作为一个list的一个成员,是一个字符串,并且结尾会一个换行符"\n",并返回这个list。这个函数的内部是通过循环调用readline()来实现的。如果指定了size参数,表示读取文件指定内容的长度,此时就有可能只能读取文件的一部分
with open("text.txt","r") as pf: content = pf.readlines() print content for line in content: print line
fileObject.write( str )
把str写到文件中,默认是不加换行符的,所以如果想换行的话,得手动加入换行符'
with open("test.txt","w") as pf: pf.write("我是最帮的!!\n学习文件写入操作")
结果:
我是最帮的!!
学习文件写入操作
fileObject.writelines( seq )
把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符
如:
content = "我是最帮的!!\n学习文件写入操作,加油!!!"with open("test.txt","a") as pf: pf.writelines(content)
结果:
我是最帮的!!
学习文件写入操作我是最帮的!!
学习文件写入操作,加油!!!
fileObject.close()
File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。如果文件关闭后,还对文件进行操作就会产生ValueError错误,但如果不及时关闭文件,有可能产生句
柄泄露,丢失数据
#打开文件准备写文件
fp = open( "c:\\test.txt",'w')print u"文件名:", fp.name#关闭文件fp.close()print u"文件是否关闭:", fp.closed
结果:
文件名: test.txt
文件是否关闭: True
fileObject.flush()
该函数是将缓冲区中的内容写入硬盘fileObject.tell()
返回文件操作标记的当前位置,以文件的开头为基准点
with open("test.txt","r") as pf: print u"当前文件操作标记位置为:", pf.tell() line = pf.readline() print u"读取一行后文件操作标记位置为:", pf.tell()
结果:
当前文件操作标记位置为: 0
读取一行后文件操作标记位置为: 23
fileObject.seek( offset[, from ] )
tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。seek(offset [,from])这是一个文件定位函数,该方法改变当前文件的位置。 Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0(默认值),这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将为参考位置。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。测试文件test.txt,内容如下:
with open("test.txt","r") as fp: str = fp.read(18) print u"读取的字符串是 : ", str # 查找当前位置 position = fp.tell() print u"当前文件位置 : ", position # 把指针再次重新定位到文件开头 position = fp.seek(0, 0) str = fp.read(18) print u"重新读取字符串 : ", str
结果:
读取的字符串是 : 我是最帮的!
当前文件位置 : 18
重新读取字符串 : 我是最帮的!
fileObject.truncate( [size] )
把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
with open("test.txt","r") as fp: print "Name of the file: ", fp.name line = fp.readline() print "Read Line: %s" % (line) print fp.tell() # Try to read file now remainingLine = fp.readline() print "Read Line: %s" % (remainingLine)
linecache
模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单
个文件读取多行。linecache.getlines(filename)
从名为 filename 的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,
并以 linenum-1 为元素在列表中的位置存储linecache.getline(filename,lineno)
从名为 filename 的文件中得到第 lineno 行。这个函数从不会抛出一个异常–产生错误时它将
返回”(换行符将包含在找到的行里)。
如果文件没有找到,这个函数将会在 sys.path 搜索。linecache.clearcache()
清除缓存,如果你不再需要先前从 getline() 中得到的行linecache.checkcache(filename)
检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用
这个函数,执行此函数会讲淘汰的内容删除。如果省略 filename,将检查缓存里的所有条目。linecache.updatecache(filename)
更新文件名为 filename 的缓存。如果 filename 文件更新了,使用这个函数可以更新linecache.getlines(filename)
返回的列表。如果出错,则返回空列表。删除空行的方法
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)
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=='\n': #不同操作系统下可能会有不同 print u'空行' if li.split(): outfp.write(li) infp.close() outfp.close()if __name__ == "__main__":delblankline("c:\\1.txt","c:\\2.txt")
列题:
数据文件:data.log
20160215 000148|0|collect info job start|success|
20160215000153|0|collect info job
end|success|resultcode = 0000
20160216000120|0|collect info job start|success|
20160216000121|0|collect info job
end|success|resultcode = 0000
20160217000139|0|collect info job start|success|
20160217000143|0|collect info job
end|success|resultcode = 0000
数据分析需求:
每行内容需要生成以每行
首年月日为名称的文件,
文件内容写入|0|后的所有
行内容(也包括|0| )
算法分析:
遍历每一行,每行取头8个字母
新建文件,文件名为首8个字母,然后把第15字符后的所有字
符拷贝到文件中
关闭文件
fp =open("e:\\data.log")for line in fp.readlines(): filename = line[:14] content = line[14:] with open("e:\\"+filename+".txt","w") as fp2: fp2.write(content+"\n")fp.close()