python文件操作

文件操作介绍

      打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

Table 文件对象方法

方法 描述
f.close() 关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。
f.fileno() 获得文件描述符,是一个数字
f.flush() 刷新输出缓存
f.isatty() 如果文件是一个交互终端,则返回True,否则返回False。
f.read([count]) 读出文件,如果有count,则读出count个字节。
f.readline() 读出一行信息。
f.readlines() 读出所有行,也就是读出整个文件的信息。
f.seek(offset[,where]) 把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。
f.tell() 获得文件指针位置。
f.truncate([size]) 截取文件,使文件的大小为size。
f.write(string) 把string字符串写入文件。
f.writelines(list) 把list中的字符串一行一行地写入文件,是连续写入文件,没有换行。

 read(3)代表读取3个字符,其余的文件内光标移动是以字节为单位,如:seek,tell,read,truncate

f.flush()      #讲文件内容从内存刷到硬盘(python3.x)

f.closed       #文件如果关闭则返回True

f.encoding   #查看使用open打开文件的编码

f.tell()         #查看文件处理当前的光标位置

f.seek(3)     #从开头开始算,将光标移动到第三个字节

f.truncate(10) #从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写方式打开,但是w和w+除外。

文件操作

读文件

  • f是一个文件句柄,文件内存对像包含 (文件名,字符集,大小,硬盘的起启位置)
  • 当读了一行之后,光标会移动到该行最末尾

普通读取

f = open('lyrics') #打开文件
first_line = f.readline()  #读取一行信息

data = f.read()# 读取所有内容,文件大时不要用
print(data) #打印文件
f.close() #关闭文件

对二进制的内容进行读写

f = open("yesterday2",'wb')  #文件句柄  二进制文件
f.write("hello binary
".encode())
f.close()

高性能读取文件

f=open('yesterday','r',encoding='utf-8') 
for line  in f
    print(f.strip())
f.close

写入内容

  • 如果是空白的文件,那么以r写入内容
  • 如果是已经有内容的文件,那么一定要用追加的模式 如果用w模式会被清空后写入
  • 如果想修改文件,那么只能够新建一个文件,重新复制
f=open('yesterday2','w',encoding='utf-8')
f.write('nihao')
f.close()

seek()tell()

seek():移动文件读取指针到指定位置

语法:file.seek(offset,whence=0)

              -->offset:偏移量,需要向前或向后移动的字节数,正往结束方向移动,负往开始方向移动。

              -->whence:可选值,默认为0,这意味着绝对的文件定位,

                                               1这意味着寻求相对于当前位置,

                                                2表示相对于文件的末尾。

tell():返回文件读取指针的位置

f = open("yesterday2",'r',encoding="utf-8")
print(f.tell())        #按字符计数
#print(f.readline())   #按字符进行读取
#print(f.read(5))      #只读5个字符
print(f.tell()) 

#回到第哪个字符
f.seek(0)    #回到第0个字符
f.seek(10)   #回到第10字符
print(f.readline())

读取最后一行

f=open('yesterday2','rb')
for i in f:
    offs = -10
    while True:
        f.seek(offs,2)  # 从最后一行往前找
        data = f.readlines()  #一行一行找
        if len(data) > 1:
            print('文件的最后一行是:%s' % (data[-1]).decode('utf-8'))  # 读取文件最后一行
            break
        offs *= 2    #相当于两倍文件的内容中查找
f.close()

flush 刷新 

说明:写入的内容是存放在电脑的缓存中的,只有flush了一下,才会保存到硬盘中去。

#刚写完一行内容,如果断电,他就没有写进去,断电内存中数据就会丢失。如果没有断电,数据还在内存的缓存中,需要刷新一下,才能写到硬盘中。

#内存有一个大小限制,需要达到这个大小,才会把内存缓存中的内容写到硬盘中。

进度条:

#!/usr/bin/env python
# -*- coding:utf-8 -*-      
import sys,time

for i in range(50):
    sys.stdout.write("#")
    sys.stdout.flush()
    time.sleep(0.1)

truncate 截断文件

  • 默认从0开始截断
  • 需要截断某段内容seek移动光标,输入光标位置即可
f = open("yesterday2",'a',encoding="utf-8")  #文件句柄
f.seek(10)
f.truncate(20)

with上下文打开文件

  • with打开文件可以实现自动关闭
  • 内部打开文件时候执行__entry__方法
  • 执行结束后执行__exit__方法关闭文件等处理后续操作
with open('log','r') as f:
...

打开多个

with open("yesterday2",'r',encoding="utf-8") as f ,
        open("yesterday2", 'r', encoding="utf-8") as f2:
    for line in f:
        print(line)

参考:https://www.cnblogs.com/nulige/p/6037752.html

原文地址:https://www.cnblogs.com/chenxuming/p/9475192.html