Python文件读写代码

print “\thello world!”
‘’’#同一文件夹里
with open(‘pi.cpp’) as file_obj:
content = file_obj.read()
print(content)
‘’’
‘’’#相对路径
with open(‘text_file\pi2.cpp’) as file_obj2:
content2 = file_obj2.read()
print(content2)
‘’’
‘’’#逐行读取文件
with open(‘pi.cpp’) as file_obj:
for line in file_obj:
print(line.rstrip())
‘’’
‘’’#创建一个包含文件各行内容的列表,可在with代码块外使用该列表
with open(‘pi.cpp’) as file_obj:
lines = file_obj.readlines()

for line in lines:
print(line.rstrip())
‘’’
print ‘\n\thello world!’
#先清空所有文件内容,写入多行文件,需要在文本末尾加换行符
file_name = ‘ppii.cpp’
with open(file_name, ‘w’) as file_objp:
file_objp.write(‘I love programming.\n’)
file_objp.write(‘programming\n’)
#附加到文件,内容加在文件末尾
fil_nam = ‘ppii.cpp’
with open(fil_nam, ‘a’) as fil_obj:
fil_obj.write(‘I love programming,too.\n’)
#在文件开头添加内容
fi_na = ‘pppiii.cpp’
with open(fi_na, ‘r+’) as fi_ob:
content = fi_ob.read()
fi_ob.seek(0,0)
fi_ob.write(‘I love python.\n’)
fi_ob.write(content)
print ‘\n\thello world!’

seek(offset,whence)
参数
offset:坐标,也就是代表需要移动偏移的字节数;正数表示从前向后,负数表示从后向前,0表示最开始的游标开始的偏移量。
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
返回值
如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。

tell() 函数:返回文件的当前位置,即文件指针当前位置。
语法
tell() 方法语法如下:
fileObject.tell()
参数:无
返回值:返回文件的当前位置。

使用 open() 函数打开文件并读取文件中的内容时,总是会从文件的第一个字符(字节)开始读起。那么,有没有办法可以自定指定读取的起始位置呢?答案是肯定,这就需要移动文件指针的位置。
文件指针用于标明文件读写的起始位置。假如把文件看成一个水流,文件中每个数据(以 b 模式打开,每个数据就是一个字节;以普通模式打开,每个数据就是一个字符)就相当于一个水滴,而文件指针就标明了文件将要从文件的哪个位置开始读起。
可以看到,通过移动文件指针的位置,再借助 read() 和 write() 函数,就可以轻松实现,读取文件中指定位置的数据(或者向文件中的指定位置写入数据)。
注意,当向文件中写入数据时,如果不是文件的尾部,写入位置的原有数据不会自行向后移动,新写入的数据会将文件中处于该位置的数据直接覆盖掉。
实现对文件指针的移动,文件对象提供了 tell() 函数和 seek() 函数。tell() 函数用于判断文件指针当前所处的位置,而 seek() 函数用于移动文件指针到文件的指定位置。

tell() 函数
tell() 函数的用法很简单,其基本语法格式如下:
file.tell()
其中,file 表示文件对象。
例如,在同一目录下,编写如下程序对 a.txt 文件做读取操作,a.txt 文件中内容为:
http://c.biancheng.net
读取 a.txt 的代码如下:
f = open(“a.txt”,‘r’)
print(f.tell())
print(f.read(3))
print(f.tell())
运行结果为:
0
htt
3
可以看到,当使用 open() 函数打开文件时,文件指针的起始位置为 0,表示位于文件的开头处,当使用 read() 函数从文件中读取 3 个字符之后,文件指针同时向后移动了 3 个字符的位置。这就表明,当程序使用文件对象读写数据时,文件指针会自动向后移动:读写了多少个数据,文件指针就自动向后移动多少个位置。

seek()函数
seek() 函数用于将文件指针移动至指定位置,该函数的语法格式如下:
file.seek(offset[, whence])
其中,各个参数的含义如下:
file:表示文件对象;
whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
offset:表示相对于 whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。例如,当whence == 0 &&offset == 3(即 seek(3,0) ),表示文件指针移动至距离文件开头处 3 个字符的位置;当whence == 1 &&offset == 5(即 seek(5,1) ),表示文件指针向后移动,移动至距离当前位置 5 个字符处。
注意,当 offset 值非 0 时,Python 要求文件必须要以二进制格式打开,否则会抛出 io.UnsupportedOperation 错误。
下面程序示范了文件指针操作:
f = open(‘a.txt’, ‘rb’)
# 判断文件指针的位置
print(f.tell())
# 读取一个字节,文件指针自动后移1个数据
print(f.read(1))
print(f.tell())
# 将文件指针从文件开头,向后移动到 5 个字符的位置
f.seek(5)
print(f.tell())
print(f.read(1))
# 将文件指针从当前位置,向后移动到 5 个字符的位置
f.seek(5, 1)
print(f.tell())
print(f.read(1))
# 将文件指针从文件结尾,向前移动到距离 10 个字符的位置
f.seek(-1, 2)
print(f.tell())
print(f.read(1))
运行结果为:
0
b’h’
1
5
b’/’
11
b’a’
21
b’t’
注意:由于程序中使用 seek() 时,使用了非 0 的偏移量,因此文件的打开方式中必须包含 b,否则就会报 io.UnsupportedOperation 错误,有兴趣的读者可自定尝试。
上面程序示范了使用 seek() 方法来移动文件指针,包括从文件开头、指针当前位置、文件结尾处开始计算。运行上面程序,结合程序输出结果可以体会文件指针移动的效果。

你可能感兴趣的:(python)