码迷,mamicode.com
首页 > 其他好文 > 详细

7 文件操作

时间:2018-10-26 22:13:36      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:info   源文件   读取   一个   font   内存   spl   根据   lines   

一 打开文件的方式

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()去掉空白。空格, \t \n
line = f.readline() # 读取一行数据
print(line.strip())

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

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

技术分享图片W
f = open("黑猫记者", mode="w", encoding="utf-8") # w可以帮我们创建文件
# f.write("\n")
f.write("太黑\n")
f.write("很黑\n")
f.write("特别黑\n")
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 文件操作

标签:info   源文件   读取   一个   font   内存   spl   根据   lines   

原文地址:https://www.cnblogs.com/-0121/p/9858507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!