Python-18-函数_07_文件处理

Posted newmet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-18-函数_07_文件处理相关的知识,希望对你有一定的参考价值。

文件处理流程:
1、打开文件,得到文件句柄并赋值给一个变量
2、通过句柄对文件进行操作
3、关闭文件
# Example 1

# f = open(‘a‘,encoding=‘utf-8‘)          # 打开文件,得到文件句柄并赋值给一个变量
# data = f.read()                          # 通过句柄对文件进行操作
# print(data)
# f.close()                                # 关闭文件
##################### 打开文件的模式 ##################
默认为文本模式,只能是字符串(文件没有修改一说,全是覆盖!!)
r -- 只读模式【默认模式;文件必须存在,不存在则抛出异常】
w -- 只写模式【不可读;不存在则创建;存在则清空内容】
a -- 只追加写模式【不可读;不存在则创建;存在则只追加内容】
x -- 只写模式【不可读;不存在则创建;存在则报错】(不常用,没什么用)
##################### 打开文件的模式 ##################
对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,
使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb wb ab
以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
##################### 打开文件的模式 ##################
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+, 写读【可读,可写】
a+, 写读【可读,可写】
##################### 打开文件的模式 ##################
# 1、r -- 只读模式

# f = open(‘a‘,‘r‘,encoding=‘utf-8‘)      # 默认打开模式就为 r
# data = f.read()                          # 读取文件全部,如果这里读取了,下面再出现readline 就没有文件读取了。
# print(data)
# print(f.readable())                       # 结果:True  判断当前文件是否是-只读(r)
# print(f.readline())                       # 读取文件 第一行 (一次读一行)
# print(f.readline(),end="")                # 读取文件 第二行 并且第二行、第三行之间没有 另隔一行 换行
# print(f.readline())                       # 读取文件 第三行

# data = f.readlines()                        # 将文件所有行,按列表的形式输出
# print(data)

# f.close()


# 2、w -- 只写模式

# 写模式--如果文件不存在,新建一个文件;如果文件存在,会把该文件清空(==新建一个空文件,覆盖原文件)
# f = open(‘a1‘,‘w‘,encoding=‘utf-8‘)
# f.write("newmet.top == 初相识 01
")
# f.write("newmet.top == 初相识 02
")
# f.write("new
met.top
初相识 03
")
# print(f.writable())              # 结果:True  判断当前文件是否是-只写(w)
# f.writelines([‘111
‘,‘222
‘,‘333
‘])
#
# f.close()

# 3、a -- 只追加写模式

# f = open(‘a1‘,‘a‘,encoding=‘utf-8‘)
# f.write("写到文件最后")               # 类似 日志访问记录,自动追加到文件最后
# f.close()


# 4、f.close 可以不写,利用with关键字去只写、只读文件:

# 1)打开一个文件:
with open(a1,w,encoding=utf-8) as f:
    f.write("newmet.top
初相识
")

# 2)同时打开两个文件:
with open(a,r,encoding=utf-8) as src_f,        open(a1,w,encoding=utf-8) as dst_f:              # 同一行代码太长,加 enter 换行
    data = src_f.read()
    dst_f.write(data)
##################### 文件的修改 ##################
# 1、文件取出来、修改

src_f = open(文件修改,r,encoding=utf-8)
data1 = src_f.readlines()      # 列表
src_f.close()

dst_f = open("文件修改-01","w",encoding="utf-8")
# f2.writelines(data1)
dst_f.write(data1[0])
dst_f.close()

# 2、文件覆盖

src_f = open(文件修改,r,encoding=utf-8)
data1 = src_f.readlines()      # 列表
src_f.close()

dst_f = open("文件修改","w",encoding="utf-8")
# f2.writelines(data1)
dst_f.write(data1[0])
dst_f.close()


# 上面1、2合并在一起:
with open(文件修改,r,encoding=utf-8) as src_f,        open(文件修改-01,w,encoding=utf-8) as dst_f:              # 同一行代码太长,加 enter 换行
    data = src_f.read()
    dst_f.write(data)
##################### b模式 ##################
f = open(a1,rb)             # b模式不能指定编码
data = f.read()
print(data)                     # 二进制
print(data.decode(utf-8))    # 字符串
f.close()


f = open(a1,wb)             # b模式不能指定编码
f.write(bytes(newmet
,encoding=utf-8))    # 编码
f.write(初相识.encode(utf-8))               # 编码
f.close()

f = open(a1,ab)             # b模式不能指定编码
f.write(初相识.encode(utf-8))               # 编码
f.close()
##################### 文件处理的其他方法 ##################
f=open(a1,r+,encoding=utf-8)
f.read()            #读取所有内容,光标移动到文件末尾
f.readline()        #读取一行内容,光标移动到第二行首部
f.readlines()       #读取每一行内容,存放于列表中
print(f.encoding)   # 输出 读取时文件使用的编码
f.flush()           # 刷新 保存
print(f.name)       # 打印文件名

f=open(a1,r+,encoding=utf-8,newline=‘‘)   # 读取文件中真正的换行符号(
)

# 光标的移动
# 一: read(3):
#   1. 文件打开方式为文本模式时,代表读取3个字符
#   2. 文件打开方式为b模式时,代表读取3个字节
# 二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

print(f.tell())     # 定位光标位置
f.readline()
print(f.tell())
f.seek(10)
print(f.tell())

data=f.truncate(10)         # 截取从开始一直到第10个 部分
print(data)

############   seek 0、1、2   ##########

# 1、f.seek(3,0)
# 0 可写可不写,代表从开头位置算起
f=open(seek.txt,r,encoding=utf-8)
print(f.tell())           # 0
f.seek(10)
print(f.tell())           # 10
f.seek(3)
print(f.tell())           # 3

# 2、f.seek(3,1)
# 1 代表相对位置,从上一次光标所在位置算起
# 相对位置,只能是b模式,而且不能有encoding编码
f=open(seek.txt,rb)
print(f.tell())         # 0
f.seek(10,1)            # 10
print(f.tell())
f.seek(3,1)
print(f.tell())         # 13

# 3、f.seek(3,2)
# 2 代表相对位置,从末尾光标所在位置算起
# 相对位置,只能是b模式,而且不能有encoding编码
f=open(seek.txt,rb)
print(f.tell())
f.seek(-10,2)
print(f.read())         # 结果:b‘2
newmet3‘

############   seek 0、1、2   ##########

# 看日志最后一行内容:

# 1、基础方法:
f=open(日志文件,rb)
data=f.readlines()
print(data[-1].decode(utf-8))

# 2、seek方法:

# 看日志最后一行内容:
f=open(日志文件,rb)
for i in f:             # 循环文件的推荐方式  要一行给一行
    offs = -3           # 定义一个偏移量
    while True:
        f.seek(offs,2)
        data=f.readlines()
        if len(data)>1:
            print(最后一行:%s%(data[-1].decode(utf-8)))
            break
        offs*=2
# 倒序阅读,逐渐增加偏移量

 




















以上是关于Python-18-函数_07_文件处理的主要内容,如果未能解决你的问题,请参考以下文章

PHP表单处理会话管理文件上传文件处理执行函数(10.8 第十六天)

6C_宏定义与预处理函数与函数库

批处理:从文件名(子字符串)创建文件夹

C进阶详解预处理指令

创建一个 perl 脚本来批处理文件

07_关于联表的处理