python之路(文件操作处理)

一、文件操作

1、打开文件的两种方法

#方法一,句柄操作
f=open('a.txt','r',encoding='utf-8')#打开文件,获得文件句柄
data=f.read() #通过句柄对文件进行操作
print(data)
f.close()   #关闭文件

#方法二,上下文管理
with open('a.txt','r',encoding='utf-8') as f:
    a=f.read()
    print(a)

2、文件全文本操作

#遍历全文本:方法一
fname=input("请输入要打开的文件名称:")
fo=open(fname,'r')
txt=fo.read()
fo.close()#一次读入,统一处理

#遍历全文本:方法二
fname=input("请输入要打开的文件名称:")
fo=open(fname,'r')
txt=fo.read(2)
while txt!="":
    txt=fo.read(2)
fo.close()#按数量读入,逐步处理

3、文件逐行操作

#方法一
fname=input("请输入要打开的文件名称:")
fo=open(fname,'r')
txt=fo.read(2)
for line in fo.readlines():
    print(line)
fo.close()  #一次读入,分行处理
#方法二
fname=input("请输入要打开的文件名称:")
fo=open(fname,'r')
for line in fo:
    print(line)
fo.close()  #一次读入,逐行处理

4、特别注意

1,文件操作后记得关闭文件,否则占用内存
2,如果没有为句柄指定编码,那么打开文件用默认编码。windows下默认gbk;linux下默认utf-8

二、文件操作模式

f=open('文件路径','操作模式',encoding='指定编码')
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)

三、操作文件

1、操作方法

file.close()    关闭文件。关闭后文件不能再进行读写操作。

file.flush()    刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
	
file.fileno()    返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
	
file.isatty()    如果文件连接到一个终端设备返回 True,否则返回 False。
	
file.next()    返回文件下一行。
	
* file.read([size])    从文件读取指定的字节数,如果未给定或为负则读取所有。
	
* file.readline([size])    读取整行,包括 "\n" 字符。
	
* file.readlines([sizeint])    读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
	
* file.seek(offset[, whence])    设置文件光标当前位置,0-开头;1-当前;2-文件结尾

file.tell()    返回文件当前位置。
	
file.truncate([size])    截取文件,截取的字节通过size指定,默认为当前文件位置。
	
* file.write(str)    将字符串写入文件,返回的是写入的字符长度。

* file.writelines(sequence)    向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

#掌握
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中

f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式

#了解
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘
f.name

  

2、文件内位置操作方法

一: read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

import time
with open('test.txt','rb') as f:
    f.seek(0,2)
    while True:
        line=f.readline()
        if line:
            print(line.decode('utf-8'))
        else:
            time.sleep(0.2)
基于seek实现tail -f功能

3、文件修改

方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

import os
with open('a.txt','r') as read_f,open('.a.txt.swap','w') as write_f:
    data=read_f.read()
    data=data.replace('old','new')
    write_f.write(data)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')

方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

import os
with open('a.txt','r') as read_f,\
        open('.a.txt.swap','w') as write_f:
    for line in read_f:
        line=line.replace('old','new')
        write_f.write(line)

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')

猜你喜欢

转载自www.cnblogs.com/lzzone/p/11227093.html