python--文件操作

一 . 文件操作

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

# 首先需要有一个 "alex和wusir的故事"的文档
f = open("alex和wusir的故事", mode="r", encoding="utf-8")
# 读取内容
content = f.read()  # 全部都读取出来
print(content)
# 坑:
c2 = f.read() # 读取不到内容. 因为上面已经读取完毕. 光标在末尾
print("c2", c2)
# 良好的习惯
f.close() # 关闭连接

# 也可以用with对文件进行操作
with open("alex和wusir的故事", mode="r", encoding="utf-8") as f:
  f.read()
复制代码

 

 


二 . 文件路径


复制代码
 1. 相对路径: 相对于当前程序所在的文件夹, 如果再文件夹内. 随便找. 直接写名字
      如果不在这个文件夹内. 可能需要出文件夹或者进文件夹
          出文件夹  ../
          进文件夹  文件夹/
 2. 绝对路径: 从磁盘根目录寻找路径 (有问题,比如说发给用户的是在D盘下的文件但是用户没有D盘就会出现问题)
          只有在记录日志的时候可以用到绝对路径
日志: 程序运行过程中记录的信息.
复制代码

三 . mode 的各个功能

  mode: r

复制代码
f = open("乔峰会使用降龙十八掌.txt", mode="r", encoding="utf-8")
print(f.read(5))  # 读取5个字符
print(f.read(5))  # 继续读5个

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

print("周润发", end="胡辣汤")
print("周星驰")
print(f.readlines())  #  一次性把文件中的内容读取到列表中.
复制代码

 

  mode: w

复制代码
# 每次用w模式打开文件, 都会清空这个文件(坑)
f = open('胡辣汤', mode="w", encoding="utf-8") # 可以帮我们创建文件
f.write('河南特色\n')
f.write("东北特色\n")
f.write('陕西特色\n')
# 好习惯
f.flush()  # 刷新管道, 把数据写入文件
f.close()
复制代码

 

 

  mode: a

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

 

  mode: +

复制代码
f = open("葫芦小金刚", mode="r+", encoding="utf-8")
content = f.read(2)  # 顺序必须先读, 后写
# r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾
f.write('五娃')
print(content)

一上来会清空文件. 没人用
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 = open("葫芦小金刚", mode="a+", encoding="utf-8")
f.write("机器葫芦娃召唤神龙, 高喊.我代表月亮消灭你!")
f.seek(0)
s = f.read()
print("=========>", s)
复制代码

 

四 . 文件复制

复制代码
f1 = open("c:/wuyanzu.jpg", mode="rb")
f2 = open("d:/wuyanzu.jpg", mode="wb")
for line in f1: # line是从f1中读取的内容
    f2.write(line)  # 把读取的内容原封不动的写出去
f1.close()
f2.flush()
f2.close()
复制代码

 

 五 . seek 和 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表示操作系统
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 "好人" in line:
            line = line.replace("好人", "sb")
        f2.write(line)

# time.sleep(3) # 程序暂停3秒
# 删除原来文件
os.remove("夸一夸alex")
# 重命名副本为原来的文件名
os.rename("夸一夸alex_副本", "夸一夸alex")
复制代码
posted @ 2019-04-08 20:25  截击机1  阅读(145)  评论(0编辑  收藏  举报