Python文件读写技巧( 三 )


1)tell() 函数-获取指针位置
tell() 函数的用法很简单,其基本语法格式如下:
 

file.tell()
# tell()函数获取文件指针位置 f = open(file='read.txt', encoding='utf-8') f.read(5) print(f.tell()) # 指针位置为5 f.read(5) print(f.tell()) # 指针位置为10 f.close()2)seek()函数-设置指针位置 
seek() 函数用于将文件指针移动至指定位置,该函数的语法格式如下:
 
file.seek(offset[, whence])
 
参数释义:
 
  • offset:偏移量
  • whence:指针所在位置,默认为0-开头位置,1表示当前位置,2表示文件尾
# seek()函数设置文件指针位置 f1 = open(file='read.txt', encoding='utf-8') f1.read(5) print(f1.tell()) # 指针位置为5 f1.seek(9) # 设置指针位置为9 print(f1.tell()) # 指针位置为9 f1.close()6.使用with...as...语法读写文件 
在 Python 中,使用 with...as... 语句操作上下文管理器(context manager),它能够帮助我们自动分配并且释放资源 。
with as 语句示例:
# with...as...上下文管理器 # with...as...能够自动释放资源,无需手动关闭 with open('read.txt', encoding='utf-8') as f: print(f.read())
由于with...as...语句自带资源调度能力,所以上面的读取大文件也可以使用with...as...语句来实现:
def read_book(file_path): """读取大文件,逐行读取""" with open(file_path, encoding='utf-8') as file_object: while True: chunk_data = file_object.readlines() for chunk in chunk_data: print(chunk) if not chunk_data: break time.sleep(1)7.fileinput模块:逐行读取多个文件
Python 提供了 fileinput 模块,通过该模块中的 input() 函数,我们能同时打开指定的多个文件,还可以逐个读取这些文件中的内容 。
fileinput 模块中 input() 该函数的语法格式如下:
 
fileinput.input(files="filename1, filename2, ...", inplace=False, backup='', bufsize=0, mode='r', openhook=None)
 
其中,各个参数的含义如下:
 
  • files:多个文件的路径列表;
  • inplace:用于指定是否将标准输出的结果写回到文件,此参数默认值为 False;
  • backup:用于指定备份文件的扩展名;
  • bufsize:指定缓冲区的大小,默认为 0;
  • mode:打开文件的格式,默认为 r(只读格式);
  • openhook:控制文件的打开方式,例如编码格式等 。
import fileinput # 同时读取多个文件 for line in fileinput.input(files=('read.txt', 'write.txt'), openhook=fileinput.hook_encoded('utf-8')): print(line, end="n") fileinput.close() # 替换指定内容,并备份 # 注:openhook=fileinput.hook_encoded('utf-8')指定编码方式 # inplace=True不能和openhook参数同时使用,否则会报错 for content in fileinput.input(files='read.txt', backup='.bak', inplace=True): print(content.replace('hello', 'HELLO')) fileinput.close()8.linecache模块:读取文件指定行 
除了可以借助 fileinput 模块实现读取文件外,Python 还提供了 linecache 模块 。和前者不同,linecache 模块擅长读取指定文件中的指定行 。换句话说,如果我们想读取某个文件中指定行包含的数据,就可以使用 linecache 模块 。示例:
import linecache import string # linecache()读取指定行 print(linecache.getline(string.__file__, 3)) # 读取string文件的第三行 for line in linecache.getlines('read.txt'): # 读取文件的所有行,返回结果为一个列表 print(line)三、Python写入文件1.Python write()函数
Python 中的文件对象提供了 write() 函数,可以向文件中写入指定内容 。该函数的语法格式:
 
file.write(string)
 
其中:
 
  • file 表示已经打开的文件对象;
  • string 表示要写入的字符串(或字节,仅适用写入二进制文件) 。
# write()方法写入文件 f = open('write.txt', 'w') f.write("hello world 1n") f.write("hello world 2n") f.write("hello world 3n") f.close()2.Python writelines()函数 
Python 的文件对象中,不仅提供了 write() 函数,还提供了 writelines() 函数,可以实现将字符串列表写入文件中 。
# write()方法批量写入文件 f_w = open('write.txt', 'w+', encoding='utf-8') f_r = open("E:/很纯很暧昧.txt", encoding='utf-8') book = f_r.read(100) f_w.writelines(book) f_w.close()


推荐阅读