专栏首页python3day 08 文件操作

day 08 文件操作

文件操作  - >open()  打开

f = open(文件路径,mode='模式',encoding='编码格式') 最最底层操作的是bytes,打开一个文件的时候获取到的是一个文件的句柄

从文件中读取数据

f.read()  读取文档的内容

f.close()  关闭连接

f.flush()  刷新管道,把数据写入文件

f = open("alex和wusir的故事", mode="r", encoding="utf-8")

# 读取内容    #####首先新建一个文件,文本的名称是什么就是什么

content = f.read()  # 全部都读取出来

print(content)

# 坑:

c2 = f.read() # 读取不到内容. 因为上面已经读取完毕. 光标在末尾

print("c2", c2)

如果你打开的文档不是在py里面建立的,直接打开文档的路径,但是要注意的是,这个文档编码的格式是"gbk"

f = open("E:\西游记\金角大王吧.txt", mode="r", encoding="gbk")

print(f.read())

f.close()

文件的路径:

1.相对路径: 相对于当前程序所在的文件夹,如果在文件夹内,随便找,直接写名字;                      如果不在这个文件夹内,可能需要出文件夹或者进文件夹

                   ../  出文件夹

                   /   进文件夹:  文件夹/

2.绝对路径:从磁盘根目录寻找路径(有问题)

         只有在记录日志的时候可以用到绝对路径

日志: 程序运行过程中记录的信息

mode:

r  read  只读,读取

   读取文件的相关操作:

   1.read()  默认读取文件内容(全部)

   2. read(n) 读取n个字符

f = open('你喜欢的游戏', mode='r', encoding='utf-8')

print(f.read(3))  #读取3个字符

print(f.read(3))  #继续读3个字符

# 你喜欢

# # 的游戏

print(f.readline().strip()) # 换行符为分割, strip()可以去掉换行. 读取到的内容第一件事就是去掉空白

print(f.readline()) # 换行符为分割

扩展:

print("周润发", end="胡辣汤")    end 在最后添加内容并添加到新的一行

print("周星驰")    ##周润发胡辣汤周星驰

   3. readline()   读取一行 

   4. readlins()     读取全部,返回列表,一次性把文件中的读取出来

print("你叫什么名字?\n 我叫李嘉诚. 可能") #  换行

print("你叫什么名字?\\n 我叫李嘉诚. 可能") #  显示 \n

print("你叫什么名字?\\\\n 我叫李嘉诚. 可能") #  显示 \\n

   5.  for line in f:   每次读取一行内容

      文件句柄是一个可迭代对象

      #优点:相对节省内存

for line in f:    ####从文件中读取到每一行给前面的line

  print(line.steip())

f.close()

w   写如,只写

创建文件

清空文件

每次用w模式打开文件,都会清空这个文件(坑)

次用w模式打开文件, 都会清空这个文件(坑)

f = open('胡辣汤', mode="w", encoding="utf-8") # 可以帮我们创建文件

f.write('河南特色\n')

f.write("东北特色\n")

f.write('陕西特色\n')

# 好习惯

f.flush()  # 刷新管道, 把数据写入文件

f.close()

a    

也可以创建文件

apppend() 追加,在文件的末尾写入内容

f = open("葫芦小金刚", mode="a", encoding="utf-8") # a, append 追加, 在文件的末尾写入内容 f.write("你叫什么名字啊?")

f.read() # not readable

f.flush()

f.close()

r+ :  读写操作   对于文件而言.应该有的操作就是两个: 读,写

不论读取内容的多少,只要你读了,写就是在末尾

f = open("你喜欢的游戏", mode="r+", encoding="utf-8")

content = f.read(2)  # 顺序必须先读, 后写

print(content)   #你喜

r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾

f.write('五娃')

f.flush()

f.close()

print(f)

w+ : 写读操作  ,一上来就会清空文件,很少人用

一上来会清空文件. 没人用

f = open("葫芦小金刚", mode="w+", encoding="utf-8")

# content = f.read(2)  # 顺序必须先读, 后写

# # r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾

f.write('五娃')

f.write("又能吐火的, 有能吐水的.")

# # 移动光标

f.seek(0) # 移动到开头

s = f.read()

print("=========>", s)

 移动光标    f.seek(0) 移动到开头

a+ :   追加写读 ,光标在末尾.所有的写都是在末尾

# 追加写读, 光标在末尾. 所有的写都是在末尾

f = open("葫芦小金刚", mode="a+", encoding="utf-8")

f.write("机器葫芦娃召唤神龙, 高喊.我代表月亮消灭你!")

f.seek(0)

s = f.read()

print("=========>", s)

所有带b的表示直接操作bytes,档处理非文本文件的时候

rb

wb

f1 = open("c:/huyifei.jpg", mode="rb")

f2 = open("d:/huerfei.jpg", mode="wb")

for line in f1: # line是从f1中读取的内容

    f2.write(line)  # 把读取的内容原封不动的写出去

f1.close()

f2.flush()

f2.close()

ab   断点续传,如下载视频,停止后再开始从停止的位置继续下载

文件操作中关于文件句柄的相关操作

seek()  移动光标

f.seek(0)  移动到开头(最多)

f.seek(0, 2)

seek : 1.表示偏移,   默认0,开头   1,当前位置   2,末尾

tell:   返回光标所在的位置

f = open("胡辣汤", mode="r+", encoding="utf-8")

# f.seek(0,2) # 移动到末尾

# content = f.read(5)

# print(content)

# f.seek(0) # 移动到开头

# print(f.read())

# print(f.tell())  # 字节

f.seek(3)

print(f.read())

文件修改,实际操作

文件修改:

1.先从文件中读取内容

2.把修改的内容进行修改

3.把修改好的内容写入一个新文件

4.删除掉原来的文件

5.把新文件重命名成原来的文件的名字

#####导入os 模块   os表示操作系统

f = open("夸一夸alex", mode="r", encoding="utf-8")

f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")

# 导入os模块  os表示操作系统

import os

f = open("夸一夸alex", mode="r", encoding="utf-8")

f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")

for line in f:

    if "sb" in line:

        line = line.replace("sb", "好人")

        f2.write(line)

f.close()

f2.flush()

f2.close()

os.remove("夸一夸alex")    # 删除原来文件

os.rename("夸一夸alex_副本", "夸一夸alex")    # 重命名副本为原来的文件名

使用的 with ......as   会自动帮我们关闭文件的连接

# 导入os模块  os表示操作系统

import os

f = open("夸一夸alex", mode="r", encoding="utf-8")

f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")

# with会自动的帮我们关闭文件的链接

with open("夸一夸alex", mode="r", encoding="utf-8") as f, \

     open("夸一夸alex_副本", mode="w", encoding="utf-8") as f2:

    for line in f:

        if "sb" in line:

            line = line.replace("sb", "好人")

            f2.write(line)

# f.close()

# f2.flush()

# f2.close()

# time.sleep(3) # 程序暂停3秒

os.remove("夸一夸alex")   # 删除原来文件

os.rename("夸一夸alex_副本", "夸一夸alex")     # 重命名副本为原来的文件名

实际操作: 水果.txt文档

编号,名称,价格,数量

1,香蕉,1.85,20

2,苹果,2.6,10

3,榴莲,25,200

4,木瓜,3.5,17

f = open("水果.txt", mode="r", encoding="utf-8")

line = f.readline().strip() # 第一行内容,   编号,名称,价格,数量,哈哈

title = line.split(",") # [编号,名称,价格,数量,哈哈]

lst = []

i = 0

for line in f:  # 1,香蕉,1.85,50

    dic = {}  # 每行都是一个字典

    line = line.strip()  # 去掉空白  \n 1,香蕉,1.85,50

    data = line.split(",") # [1, 香蕉, 1.85, 50]

    for i in range(len(title)):

        dic[title[i]] = data[i]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python文件处理

    python中的都是用 open() 函数,调用 open() 函数,应用程序会发起系统调用 open(...) ,进而对文件完成操作~。以下示例均在 pyth...

    py3study
  • python3-文件的操作

    py3study
  • python3-文件的修改——实现类似s

    py3study
  • Java基础第三天学习笔记

    03.01_Java语言基础(逻辑运算符的基本用法)(掌握) * A:逻辑运算符有哪些 * &,|,^,! * &&,|| * B:案例演示 * 逻辑运算...

    Java学习
  • LeetCode 3: 无重复字符的最长子串

    Given a string, find the length of the longest substring without repeating chara...

    爱写bug
  • Java基础笔记03

    dreamkong
  • redis持久化策略梳理及主从环境下的策略调整记录

    redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。可以不定期的通过异步方式保存到磁盘上(即“半持久化模式”...

    洗尽了浮华
  • 分享:震撼全世界的一段碑文...

    大数据文摘
  • 命令行参数

    process.argv的用法是第一个是node文件, 第二个是脚本文件, 第三个是参数

    木子星兮
  • 超详细的Python实现微博模拟登陆,小白都能懂

    最近由于需要一直在研究微博的爬虫,第一步便是模拟登陆,从开始摸索到走通模拟登陆这条路其实还是挺艰难的,需要一定的经验,为了让朋友们以后少走点弯路,这里我把我的分...

    一墨编程学习

扫码关注云+社区

领取腾讯云代金券