python中的文件操作: 包括文件的打开方式和文件的修改

python 文件操作:

文件一般分为文本文件和二进制文件。

文本文件:

由单一特定编码组成的文件,如UTF-8编码

由于存在编码,也被看成是存储着的长字符串

适用于例如:.txt文件、.py文件等

二进制文件:

直接由比特0和1组成,没有统一字符编码

一般存在二进制0和1的组织结构,即文件格式

适用于例如:.png文件、.avi文件等

正常的文件操作都分三步走:

打开文件
操作文件
关闭文件

# 1. 打开文件,得到文件句柄并赋值给一个变量
f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

#2. 通过句柄对文件进行操作
data=f.read()

#3. 关闭文件
f.close()

文件的打开模式:

variety meaning
'r' 只读模式,默认值,如果文件不存在,返回输出异常
'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖
'x' 创建写模式,文件不存在则创建,存在则返回FileExistsError
‘a’ 追加写模式,文件不存在则创建,存在则在文件最后追加内容
‘b’ 二进制文件模式
‘t’ 文本文件模式,默认值
‘+’ 与r/w/x/a一同使用,在原功能基础上增加同时读写功能

 

 

 

 

 

 

 

 

 

 

 

 

 

#1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】

#2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作
(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、
图片文件的jgp格式、视频文件的avi格式)
rb wb ab 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

文件内容的读取:

variety meaning
f.read(size=-1) 读入全部内容,如果给出参数,读入前size长度
f.readline(size=-1) 读入一行内容,如果给出参数,读入该行前size长度
f.readlines(hint=-1) 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行
f.write(s) 向文件写入一个字符串或字节流
f.writelines(lines) 将一个元素全为字符串的列表写入文件
f.seek(offset) 改变当前文件操作指针的位置,offset含义如下:0 – 文件开头; 1 – 当前位置; 2 – 文件结尾

 

 

 

 

 

 

 

 

 

 

 

 

 

#掌握
.read() #读取所有内容,光标移动到文件末尾 f.readline() #读取一行内容,光标移动到第二行首部 f.readlines() #读取每一行内容,存放于列表中 f.write('1111 222 ') #针对文本模式的写,需要自己写换行符 f.write('1111 222 '.encode('utf-8')) #针对b模式的写,需要自己写换行符 f.writelines(['333 ','444 ']) #文件模式 f.writelines([bytes('333 ',encoding='utf-8'),'444 '.encode('utf-8')]) #b模式

python2中的file与open:

#首先在python3中操作文件只有一种选择,那就是open()

#而在python2中则有两种方式:file()与open()
两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,
但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,
相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,
我们一般使用open()打开文件进行操作,而用file当做一个类型,比如type(f) is file

文件内光标的移动:

# 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)

文件的修改:

一次读入,统一处理

fo = open(fname,"r")
txt = fo.read() 
...#对全文txt进行处理
fo.close()

按数量读入,逐步处理:

fo = open(fname,"r")
txt = fo.read(2)
while txt != "":
    #对txt进行处理
    txt = fo.read(2)
fo.close()

一次读入,分行处理:

fo = open(fname,"r")
for line in fo.readlines():
    print(line)
fo.close()

分行读入,逐行处理:

fo = open(fname,"r")
for line in fo:
    print(line)
fo.close()

数据文件的写入:

fo = open("output.txt","w+") 
ls = ["China", "France", "America"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
    print(line)
fo.close()
原文地址:https://www.cnblogs.com/sweet-i/p/11153626.html