Python文件操作

Posted Knock knock...

tags:

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

  • 文件的基础知识
  • 相对路径和绝对路径
  • r  w  a
  • rb  wb  ab
  • r+  w+  a+
  • r+b   w+b  a+b
  • 文件操作的其他方法
  • 修改文件

f=open(‘文件路径‘,mode=‘‘,encoding=‘编码集合‘)

f叫做文件句柄

打开文件后,要记得f.close()

相对路径和绝对路径

绝对路径:从C盘的根目录全部写

相对路径:比如说f=open(‘t1‘,mode=‘r‘,encoding=‘utf-8‘)

t1相对与该py文件的路径成为相对路径

跳到上一层用../

with open(..//day6//1.jpg,mode=rb)as f:
    print(f.read())

 

#绝对路径:读取一张图片
# with open(r‘C:UsersSinceDesktop1.jpg‘,mode=‘rb‘) as f:
#     print(f.read())
# r‘C:UsersSinceDesktop1.jpg‘==‘C:\Users\Since\Desktop\1.jpg‘
# 相对路径:把1.jpg放到该py文件下
# with open(‘1.jpg‘,mode=‘rb‘)as f:
#     print(f.read())

  

r

f=open(‘t1‘,mode=‘r‘,encoding=‘utf-8‘)
# ret=f.read()#把文件中的内容全部读出来,并且读完后光标会默认指到最后一个位置
# # 缺点:若文件内容过大,内存会溢出,不安全
# print(ret)#mode不写默认为r,在r模式下,如果没有文件会报错
# f.close()

# rer=f.read(3)#读他t1前3 个字符
# print(rer)
# f.close()

# line1=f.readline()#一行一行的读,并且会把末尾的
给读出来
# print(line1)
# line2=f.readline()
# print(line2)

# lst=f.readlines()#一次性全部读出来,并且读出来的每一行存到一个列表中
# print(lst)

# for line in f:#相当于readline,大型文件推荐用该方法一行一行的读取
#     print(line)

w

f=open(‘t2‘,mode=‘w‘,encoding=‘utf-8‘)
# 在w模式下,没有文件会默认创建一个文件
#w又称为覆盖写,在每次w文件时,光标都会默认移动到开头
# f.write(‘Hello‘)
f.write(‘how are you‘)
f.close()

a

f=open(‘t1‘,mode=‘a‘,encoding=‘utf-8‘)#a是追加写,在一个文件的末尾追加写
f.write(‘我们都好‘)
f.close()

b模式下就是:以字节的形式操作,一般视频,图片存在电脑里是以字节的形式存储

rb

f=open(‘t1‘,mode=‘rb‘)#rb就是以字节的形式把文件读出来
print(f.read())
f.close()  

wb

# 相当于把1.jpg复制了一份为2.jpg
# with open(‘1.jpg‘,mode=‘rb‘)as f,open(‘2.jpg‘,mode=‘wb‘)as f1:
#     ret=f.read()
#     f1.write(ret)

ab

r+(读写)

with open(‘t1‘,mode=‘r+‘,encoding=‘utf-8‘)as f:#正常情况先把整个文件读完(此时光标在末尾),再写
    print(f.read())
    # f.seek(0)
    f.write(‘我们都很好‘)

w+(写读)

with open(‘t1‘,mode=‘w+‘,encoding=‘utf-8‘)as f:#正常情况下先写在读,此时光标在最后,read不出来
    f.write(‘哈哈哈‘)
    f.write(‘呜呜呜‘)
    f.seek(0)
    print(f.read())

a+(追加写 ,读)

with open(‘t1‘,mode=‘a+‘,encoding=‘utf-8‘)as f:#正常情况下先写在读,此时光标在最后,read不出来
    f.write(‘哈哈哈‘)#区别是在文件的末尾去追加写
    f.seek(0)
    print(f.read())

 总结:

  r和rb下的

  r:  f.read(n) 得到的是前n个字符

  rb:  f.read(n)得到的是前n个字节

文件的其他的操作

seek()——按照字节

with open(‘t1‘,mode=‘r+‘,encoding=‘utf-8‘)as f:
    f.seek(0)#此时光标在最开始
    ret=f.read()#光标在最后面
    print(ret)
    f.seek(0)
    f.seek(0,2)#将光标移动末尾
    print(f.tell())
    f.write(‘你好‘)

# seek(n)是将光标移动到n位置,移动单位是Bytes,utf-8是3个字节
# 用法seek(0,0)
seek的第二个参数,0表示开头,1表示当前位置,2表示末尾

 tell()告诉光标的位置——按照字节

truncate()截断文件——按照字节

# truncate()截断文件
# with open(‘t1‘,mode=‘w‘,encoding=‘utf-8‘)as f:
#     f.write(‘哈哈‘)
#     f.seek(3)#将光标移动到3
#     f.truncate()#从当前位置的光标到末尾的内容全部删除

# truncate(n)如果给了n就从开头进行截断,不给n就从当前位置删除
f=open(‘t1‘,mode=‘r+‘,encoding=‘utf-8‘)
print(f.read())
f.truncate(3)
f.close()
# truncate(n)的意思是从第2个字(包括第二个字)到后面都删除,
# 也必须遵循utf-8的机制,按照字节去删除

 修改文件:

# 修改文件
import os
with open(‘t1‘,encoding=‘utf-8‘)as f,        open(‘t1_new‘,mode=‘w‘,encoding=‘utf-8‘)as f1:
    for line in f:
        new_line=line.replace(line,"冰糖葫芦
")
        f1.write(new_line)
os.remove(‘t1‘)
os.rename(‘t1_new‘,‘t1‘)
修改文件的方法:先把源文件给删掉,在重新命名t1_new,成t1即修改了文件

  

 

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

学习笔记:python3,代码片段(2017)

常用python日期日志获取内容循环的代码片段

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

使用 Python 代码片段编写 LaTeX 文档

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

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