文件操作  - >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() # 第一行内容,   编号,名称,价格,数量,哈哈
= 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( )):
        dic[ [i]] = data[i]
 
 
收藏 打印