python中读取文件的几种方法的区别_python读取文件,readline和readlines区别

文件123内容123

456

789

操作:f = open('123','r')

line = f.readline()

print line[0] #1

print line[-1] #\n 回车

print line[1,-1] #23,注意从1 到-1 但是不包括line[-1],而包括开始位置line[1]

注意:

f.readline()完成后最后一个字符是 ‘\n’,此时光标已经定位到了下一行的第0个位置

但是读第三行时 print line[-1]是9而不是'\n',因为此时最后一行不存在换行符

那么这样就好解决这个问题了:想在第一行后面加'hello',这样编程就错了:f = open('123','r+')

f.readline()

f.seek(-1,1) #定位到\n前f.write('hello')

f.close()

结果:

123hello789

没有在第一行写反到第二行了,这是因为原来的格局已定了,要想实现可以这样:

copycode.giff = open('123','r+')

g = open('1234','w')

line = f.readline()

line = line[:-1] + ' hello\n'g.write()

g.write(f.readline())

g.write(f.readline())

f.close()

g.close()

copycode.gif

其中用到了几个技巧:

1. 去除最后的回车键‘\n’line = f.readline()

line = line[:-1]

2. 字符串相加:line += ' hello'

f = open() line = f.readline() line:

line, line = f.readline()

f.close()

也可以写成以下更简洁的形式line open():

line,

1. 最基本的读文件方法:

?

file = open()

1:

line = file.readline()

line:

一行一行得从文件读数据,显然比较慢;不过很省内存。

在我的机器上读10M的sample.txt文件,每秒大约读32000行

2. 用fileinput模块

?

fileinput

line fileinput.input():

写法简单一些,不过测试以后发现每秒只能读13000行数据,效率比上一种方法慢了两倍多……

3. 带缓存的文件读取

?

file = open()

1:

lines = file.readlines(100000)

lines:

line lines:

这个方法真的更好吗?事实证明,用同样的数据测试,它每秒可以读96900行数据!效率是第一种方法的3倍,第二种方法的7倍!

————————————————————————————————————————————————————————————

在Python 2.2以后,我们可以直接对一个file对象使用for循环读每行数据:

?

file = open()

line file:

而在Python 2.1里,你只能用xreadlines迭代器来实现:

?

file = open()

line file.xreadlines():

#!/usr/bin/env pythonimport osfor tmpdir in('/tmp','D:/PythonLearn/temp'): if os.path.isdir(tmpdir): # os.path.isdir 指定路径是否存在且为一个目录

break

else: print 'no temp directory availiable'

tmpdir = ''

if tmpdir:

os.chdir(tmpdir) #os.chdir() 改变当前工作目录

cwd = os.getcwd() #os.getcwd() 返回当前工作目录

print '*** current temporary directory'

print cwd print '*** creating example directory...'

os.mkdir('example') #os.mkdir() 创建目录

os.chdir('example') #os.chdir() 改变当前工作目录

cwd = os.getcwd() print '*** new working directory: '

print cwd print '*** original directory listing: '

print os.listdir(cwd) #os.listdir 列出指定目录文件

print '*** creating test file...'

fobj = open('test','w')

fobj.write('foo\n')

fobj.write('bar\n')

fobj.close() print '*** updated directory listing: '

print os.listdir(cwd) #os.listdir() 列出指定目录文件

print "*** renameing 'test' to 'filetest.txt'"

os.rename('test','filetest.txt') #

os.rename 重命名文件

print '*** updated directory listing: '

print os.listdir(cwd)

path = os.path.join(cwd,os.listdir(cwd)[0]) #

os.path.join() 将分离的各部分组合成一个路径

print '*** full file pathname'

print path print '***(pathname,basename==)'

print os.path.split(path) #

os.path.split() 返回(dirname(),basename())元组

print '***(filename,extenion)=='

print os.path.splitext(os.path.basename(path)) #

os.path.splitext() 返回(filename,extension)元组

os.path.basename()去掉目录返回文件名

print '*** diaplaying file contents:'

fobj = open(path) for eachLine in fobj: print eachLine,

fobj.close() print '*** deleting test file'

os.remove(path) #删除文件

print '*** updated directory listing:'

print os.listdir(cwd)

os.chdir(os.pardir) print '*** deleting test drectory'

os.rmdir('example') print '***DONE'

f = open('D:/PythonLearn/vvgtest','w+')

f.tell() # 0

f.write('test line l\n') #加入一个长为12的字符串[0-11]

f.tell() # 12

f.write('test line 2\n') #加入一个长为12的字符串[12-23]

f.tell() # 告诉我当前位置 24f.seek(-12,1) #向后移12个字节

f.tell() # 12f.readline() # 'test line 2'

f.seek(0,0) # 回到最开始

f.readline() # 'test line 1'

f.close()

文件对象方法文件对象方法操作

file.close()关闭文件

file.fileno()返回文件的描述符(file descriptor,FD,整型值)

file.flush()刷新文件内部缓冲区

file.isatty()判断file是否是一个类tty设备

file.next()返回文件的下一行

file.read(siez=-1)从文件读取size个字节,未给定size或给定负值时,读取剩余的所有字节

file.readline(size=-1)从文件读取并返回一行,或返回最大size个字符

file.readlines(sizhint=0)读取文件的所有航并作为一个列表放回,包含所有的行结束符

file.xreadlines()用于迭代,可以替换readlines()的一个更高效的方法

file.seek(off,whence=0)在文件中移动文件指针,冲whence(0代表文件开始,1代表当前位置,2代表文件末尾)便宜off字节

file.tell()返回当前在文件中的位置

file.write(str)向文件写入字符串

file.writelines(seq)向文件写入字符串序列seq;seq应该是一个返回字符串的可迭代对象

9.4 文件内建属性

file.name 返回文件名(包含路径)

file.mode 返回文件打开模式

file.closed 返回文件是否已经关闭

file.encoding 返回文件的编码

标准文件:

python中可以通过sys模块访问文件的句柄,导入sys模块后可以使sys.stdin,sysl.stdout,sys.stderr访问。print语句输出到sys.stdout;内建raw_input()通常从sys.stdin接受输入。

import os

filename = raw_input('Enter file name:')

fobj = open(filename,'w')while True:

aLine = raw_input('Enter a line("." to quit):')

if aLine != ".":

fobj.write('%s%s' % (aLine,os.linesep))

else:

breakfobj.close()

读取方法:

read()方法用来直接读取字节到字符串中, 不带参数表示全部读取,参数表示读取多少个字节

readline() 方法读取打开文件的一行,如果提供参数表示读取字节数,默认参数是-1,代表行的结尾

readlines()方法会读取所有(剩余的)行然后把他们作为一个字符串列表返回。可选参数代表返回的最大字节大小。

输出方法:

write() 方法表示写入到文件中去

writelines() 方法是针对列表的操作,接受一个字符串列表作为参数,写入文件。行结束符不会自动加入。

核心笔记: 使用输入方法read() 或者 readlines() 从文件中读取行时,python并不会删除行结尾符。

文件内移动:

seek()方法,移动文件指针到不同的位置。

tell() 显示文件当前指针的位置。

r 以读方式打开

w 以写方式打开(清空),文件不存在时创建新文件

a 以追加的模式打开,从文件末尾开始,必要时创建新文件

r+ 以读写模式打开 w+ 以读写模式打开 a+ 以读写模式打开

rb 以二进制读模式打开 wb 以二进制写模式打开 ab 以二进制追加模式打开

rb+ 以二进制读写模式打开 wb+ 以二进制读写模式打开 ab+ 以二进制读写模式打开file = open('C:/Users/Administrator/Desktop/Python/testpy.txt','a')

file.write('这是追加的内容!!!!!!!!!!!!!!!!!!!!!!!!!')

file.close()

file = open('C:/Users/Administrator/Desktop/Python/testpy.txt','w')

file.write('这是重写的内容,会清除以前的数据!!!!!!!!!!!!!!!!!!!!!!!!!')

file.close()

file = open('C:/Users/Administrator/Desktop/Python/testpy.txt','r')

readlines = file.readlines()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值