7 文件操作

Posted -0121

tags:

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

一 打开文件的方式

1  f = open(‘文件名或者文件路径‘,mode=‘打开方式’,encoding=‘utf8‘)

f.close()

2 with open(‘文件名或者文件路径‘,mode=‘打开方式’,encoding=‘utf8‘) as f,

  open(‘文件名或者文件路径‘,mode=‘打开方式’,encoding=‘utf8‘)  打开多个文件方式

二 文件常用的操作方法

  • r  读取文件
技术分享图片
open表示打开一个文件
f 变量, 操控胡辣汤.txt文件的句柄

f = open("胡辣汤", mode="r", encoding="utf-8")
读取文件中的内容
read(n) 读取n个字符
content = f.read(3)
content = f.read() # 一次性全都读取出来,占内存

line = f.readline() # 读取一行数据
print(line.strip()) # strip()去掉空白。空格, 	 

line = f.readline() # 读取一行数据
print(line.strip())

lst = f.readlines() # 一次性全都读取出来, 返回的是列表包括换行符
print(lst)
R
  • w 写入文件

  特点: 先清空文件里面的内容再写入

技术分享图片W
f = open("黑猫记者", mode="w", encoding="utf-8") # w可以帮我们创建文件
# f.write("
")
f.write("太黑
")
f.write("很黑
")
f.write("特别黑
")
f.close()

  • a 追加模式

  特点:只能在文本末尾添加

  • b 模式

  特点:一般使用在图片,视频等非文字文件的操作

技术分享图片
b - bytes 读取和写入的是字节 , 用来操作非文本文件(图片, 音频, 视频)
rb, wb, ab

# 把刘亦菲从d盘复制到g盘, 单纯的从bytes角度来复制的。 适用于所有文件
f1 = open(r"d:刘亦菲.jpeg", mode="rb")
f2 = open(r"g:刘亦菲.jpeg", mode="wb")

for line in f1: # 分批量的读取内容
    f2.write(line) # open()出来的结果可以使用read或者write. 根据mode来看

f1.close()
f2.close()
b
  • r+  读写, w+  写读, a+ 追加写读, r+b, w+b, a+b

  特点:一般

技术分享图片
正常的
f = open("唐诗", mode="r+", encoding="utf-8")
content = f.read()
f.write("黄蓉")
print(content)

# 错误的示范
f = open("person", mode="r+", encoding="utf-8")
f.write("杨千桦") # 默认如果直接写入的话。 在开头写入。 覆盖开头的内容
content = f.read()
print(content)

# r+
# 坑: 不论你读取多少内容。再次写入的时候都是在末尾
f = open("唐诗", mode="r+", encoding="utf-8")
info = f.read(3)
f.write("胡辣汤")
print(info)
r+常见操作及坑
  • w+ 写读(不常用)
技术分享图片
# w+
f = open("唐诗", mode="w+", encoding="utf-8") # 先清空。 然后再操作
f.write("你好。 我叫肿瘤君")#清空文件写入
f.seek(0)#移动光标可以读取
content = f.read() # 写入东西之后。 光标在末尾。 读取不到内容的
print(content)
f.close()
w+注意事项
  • a+ 追加写读
技术分享图片
# a+, 不论光标在何处 写入的时候都是在末尾
f = open("唐诗", mode="a+", encoding="utf-8")
f.write("我叫李嘉诚") # 默认写在末尾
f.seek(0)#移动光标可以读取
content = f.read()#写入之后光标在最后不可读
print(content)
f.close()
View Code

三 文件中几个操作方法

  1. seek(参数1,参数2)移动光标
    参数1 表示的是偏移量,移动多少个单位
    参数2 表示从什么位置进行偏移
      0: 光标移动到开头
      1: 当前位置
      2: 光标移动到末尾
    f.seek(3) # 以字节为单位
    info = f.read(3) # 读取三个字符

  2
tell() 程序返回当前光标的位置
   3  truncate() 截断文件. 慎用按字节截取

  四 文件的修改

技术分享图片
import os # 导入os模块

import time # 时间模块

# 优点:不用关闭句柄, 自动关闭连接
with open("唐诗", mode="r", encoding="utf-8") as f1,    open("唐诗_副本", mode="w", encoding="utf-8") as f2:
    for line in f1:
        line = line.replace("善良", "sb")
        f2.write(line)

time.sleep(5)
os.remove("唐诗") # 删除源文件
time.sleep(5)
os.rename("唐诗_副本", "唐诗") # 把副本改名成源文件
View Code
  • 文件修改的一道练习
6,文件a1.txt内容

序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
通过代码,将其构建成这种数据类型:
[{‘序号‘:‘1‘,‘部门‘:Python,‘人数‘:30,‘平均年龄‘:26,‘备注‘:‘单身狗‘},
技术分享图片
with open(ax, mode=r, encoding=utf8) as f:
    lis1=[]
    lis2=[]
    line1=f.readline()
    line1=line1.strip().split( )
    for i in line1:
        if i is not ‘‘:
            lis2.append(i)
    # print(lis2)
    for line in f:
        lis3 = []
        dic = dict()
        line=line.strip().split( )
        print(line)
        for m in line:
            if m is not ‘‘:
                lis3.append(m)
        # print(lis3)
        for i in range(len(lis2)):
            dic[lis2[i]] = lis3[i]
        lis1.append(dic)
print(lis1)
View Code

 















以上是关于7 文件操作的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode 如何操作用户自定义代码片段(快捷键)

centos 7部署并汉化Gitlab及基础操作

第 7 行的 InflateException 二进制 XML 文件:膨胀类片段时出错