文件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()
结果:
123
hello
789
没有在第一行写反到第二行了,这是因为原来的格局已定了,要想实现可以这样:
f = 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()
其中用到了几个技巧:
1. 去除最后的回车键‘\n’
line = f.readline()
line = line[:-1]
2. 字符串相加:
line += ' hello'
f = open(" foo.txt " ) # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 while line: print line, # 后面跟 ',' 将忽略换行符 # print(line, end = '') # 在 Python 3中使用 line = f.readline()
f.close()
也可以写成以下更简洁的形式
for line in open(" foo.txt " ): print line,
1. 最基本的读文件方法:
? # File: readline-example-1.py file = open(" sample.txt " ) while 1:
line = file.readline() if not line: break pass # do something 一行一行得从文件读数据,显然比较慢;不过很省内存。
在我的机器上读10M的sample.txt文件,每秒大约读32000行
2. 用fileinput模块
? # File: readline-example-2.py import fileinput for line in fileinput.input(" sample.txt " ): pass 写法简单一些,不过测试以后发现每秒只能读13000行数据,效率比上一种方法慢了两倍多……
3. 带缓存的文件读取
? # File: readline-example-3.py file = open(" sample.txt " ) while 1:
lines = file.readlines(100000) if not lines: break for line in lines: pass # do something 这个方法真的更好吗?事实证明,用同样的数据测试,它每秒可以读96900行数据!效率是第一种方法的3倍,第二种方法的7倍!
————————————————————————————————————————————————————————————
在Python 2.2以后,我们可以直接对一个file对象使用for循环读每行数据:
? # File: readline-example-5.py file = open(" sample.txt " ) for line in file: pass # do something 而在Python 2.1里,你只能用xreadlines迭代器来实现:
? # File: readline-example-4.py file = open(" sample.txt " ) for line in file.xreadlines(): pass # do something
#!/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()
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com