python读写⽂件(读字节,⼆进制,分⾏读,追加等)
Python读写⽂件
1.open
使⽤open打开⽂件后⼀定要记得调⽤⽂件对象的close()⽅法。⽐如可以⽤try/finally语句来确保最后能关闭⽂件。
file_object = open('')
try:
all_the_text = ad( )
finally:
file_object.close( )
注:不能把open语句放在try块⾥,因为当打开⽂件出现异常时,⽂件对象file_object⽆法执⾏close()⽅法。
2.读⽂件
读⽂本⽂件
input = open('data', 'r')
#第⼆个参数默认为r
input = open('data')
读⼆进制⽂件
input = open('data', 'rb')
读取所有内容
file_object = open('')
try:
all_the_text = ad( )
finally:
file_object.close( )
读固定字节
file_object = open('abinfile', 'rb')
try:
while True:
chunk = ad(100)
if not chunk:
break
do_something_with(chunk)
finally:
file_object.close( )
读每⾏
list_of_all_the_lines = adlines( )
如果⽂件是⽂本⽂件,还可以直接遍历⽂件对象获取每⾏:
for line in file_object:
process line
3.写⽂件
写⽂本⽂件
output = open('data', 'w')
写⼆进制⽂件
output = open('data', 'wb')
追加写⽂件
output = open('data', 'w+')
写数据
file_object = open('', 'w')
file_object.write(all_the_text)
file_object.close( )
写⼊多⾏
file_object.writelines(list_of_text_strings)
注意,调⽤writelines写⼊多⾏在性能上会⽐使⽤write⼀次性写⼊要⾼。
在处理⽇志⽂件的时候,常常会遇到这样的情况:⽇志⽂件巨⼤,不可能⼀次性把整个⽂件读⼊到内存中进⾏处理,例如需要在⼀台物理内存为 2GB 的机器上处理⼀个 2GB 的⽇志⽂件,我们可能希望每次只处理其中 200MB 的内容。
在 Python 中,内置的 File 对象直接提供了⼀个 readlines(sizehint) 函数来完成这样的事情。以下⾯的代码为例:
file = open('test.log', 'r')sizehint = 209715200  # 200Mposition = 0lines = adlines(sizehint)while ll() - position < 0:      position = ll()      lines = adlines(sizehint)
每次调⽤ readlines(sizehint) 函数,会返回⼤约 200MB 的数据,⽽且所返回的必然都是完整的⾏数据,⼤多数情况下,返回的数据的字节数会稍微⽐ sizehint 指定的值⼤⼀点(除最后⼀次调⽤ readlines(sizehint) 函数的时候)。通常情况下,Python 会⾃动将⽤户指定的sizehint 的值调整成内部缓存⼤⼩的整数倍。
file在python是⼀个特殊的类型,它⽤于在python程序中对外部的⽂件进⾏操作。在python中⼀切都是对象,file也不例外,file有file的⽅法和属性。下⾯先来看如何创建⼀个file对象:
file(name[, mode[, buffering]])
file()函数⽤于创建⼀个file对象,它有⼀个别名叫open(),可能更形象⼀些,它们是内置函数。来看看它的参数。它参数都是以字符串的形式传递的。name是⽂件的名字。
mode是打开的模式,可选的值为r w a U,分别代表读(默认)写添加⽀持各种换⾏符的模式。⽤w或
a模式打开⽂件的话,如果⽂件不存在,那么就⾃动创建。此外,⽤w模式打开⼀个已经存在的⽂件时,原有⽂件的内容会被清空,因为⼀开始⽂件的操作的标记是在⽂件的开头的,这时候进⾏写操作,⽆疑会把原有的内容给抹掉。由于历史的原因,换⾏符在不同的系统中有不同模式,⽐如在 unix中是⼀个\n,⽽在windows中是‘\r\n’,⽤U模式打开⽂件,就是⽀持所有的换⾏模式,也就说‘\r’ '\n' '\r\n'都可表⽰换⾏,会有⼀个tuple⽤来存贮这个⽂件中⽤到过的换⾏符。不过,虽说换⾏有多种模式,读到python中统⼀⽤\n代替。在模式字符的后⾯,还可以加上+ b t这两种标识,分别表⽰可以对⽂件同时进⾏读写操作和⽤⼆进制模式、⽂本模式(默认)打开⽂件。
buffering如果为0表⽰不进⾏缓冲;如果为1表⽰进⾏“⾏缓冲“;如果是⼀个⼤于1的数表⽰缓冲区的⼤⼩,应该是以字节为单位的。
file对象有⾃⼰的属性和⽅法。先来看看file的属性。
closed #标记⽂件是否已经关闭,由close()改写
encoding #⽂件编码
mode #打开模式
name #⽂件名
newlines #⽂件中⽤到的换⾏模式,是⼀个tuple
softspace #boolean型,⼀般为0,据说⽤于print
file的读写⽅法:
#读⼀⾏,如果定义了size,有可能返回的只是⼀⾏的⼀部分
#把⽂件每⼀⾏作为⼀个list的⼀个成员,并返回这个list。其实它的内部是通过循环调⽤readline()来实现的。如果提供size参数,size是表⽰读取内容的总长,也就是说可能只读到⽂件的⼀部分。
F.write(str)
#把str写到⽂件中,write()并不会在str后加上⼀个换⾏符
F.writelines(seq)
#把seq的内容全部写到⽂件中。这个函数也只是忠实地写⼊,不会在每⾏后⾯加上任何东西。
file的其他⽅法:
F.close()
#关闭⽂件。python会在⼀个⽂件不⽤后⾃动关闭⽂件,不过这⼀功能没有保证,最好还是养成⾃⼰关闭的习惯。如果⼀个⽂件在关闭后还对其进⾏操作会产⽣ValueError
F.flush()
#把缓冲区的内容写⼊硬盘
F.fileno()
#返回⼀个长整型的”⽂件标签“
F.isatty()
#⽂件是否是⼀个终端设备⽂件(unix系统中的)
#返回⽂件操作标记的当前位置,以⽂件的开头为原点
<()
#返回下⼀⾏,并将⽂件操作标记位移到下⼀⾏。把⼀个file⽤于for ... in file这样的语句时,就是调⽤next()函数来实现遍历的。
F.seek(offset[,whence])
#将⽂件打操作标记移到offset的位置。这个offset⼀般是相对于⽂件的开头来计算的,⼀般为正数。但如果提供了whence参数就不⼀定了,whence可以为0表⽰从头开始计算,1表⽰以当前位置为原点计算。2表⽰以⽂件末尾为原点进⾏计算。需要注意,如果⽂件以a或a+的模式打开,每次进⾏写操作时,⽂件操作标记会⾃动返回到⽂件末尾。
#把⽂件裁成规定的⼤⼩,默认的是裁到当前⽂件操作标记的位置。如果size⽐⽂件的⼤⼩还要⼤,依据系统的不同可能是不改变⽂件,也可能是⽤0把⽂件补到相应的⼤⼩,也可能是以⼀些随机的内容加上去。
#
! /usr/bin/python
import
os,sys
try
:
fsock
=
open(
"
D:/SVNtest/test.py
"
,
"
"
r
"
python怎么读取py文件)
except
IOError:
print
"
The file don't exist, Please double check! "
exit()
print
'
The file mode is
'
,de
print
'
The file name is
'
,
fsock.name
P
=
print
'
the postion is %d
'
%
(P)
fsock.close()
#
Read file
fsock
=
open(
"
D:/SVNtest/test.py
"
,
"
r
"
)
AllLines
=
#
Method 1
for
EachLine
in
fsock:
print
EachLine
#
Method 2
print
'
Star
'
+
'
=
'
*
30
for
EachLine
in
AllLines:
print
EachLine
print
'
End
'
+
'
=
'
*
30
fsock.close()
#
write this file
fsock
=
open(
"
D:/SVNtest/test.py "
,
"
a
"
)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。