千纸鹤

  博客园  ::  :: 新随笔  ::  ::  :: 管理
  5 随笔 :: 70 文章 :: 0 评论 :: 9301 阅读

1、理论知识

a.文件处理概念

  a.文件的类型:音频、视频、照片、html、txt、word等等文件

  b.文件的操作:打开文件,关闭文件,读取数据,写入数据

  c.文件的作用:为了方便管理数据,为了存储数据,下次程序直接可调用

b.文件操作步骤

打开 open(文件的路径,访问模式)
读取数据(read),写入数据(write)
关闭(close)
注意:一定要记得关闭文件,避免占用资源

c.文件处理演示

f=open('test.txt','w')
f.write('xiaohuahua')
f.close()      输出结果:test.txt:xiaohuahua

2、open(文件的路径,访问模式)

  a.文件的路径

    a.相对路径:相对路径就是相对于当前文件的路径

      ./:代表当前目录的某个文件

f=open('./test.txt','w')
f.write('当前目录的某个文件写入内容')
f.close()      输出结果:test.txt:当前目录的某个文件写入内容

    ../:代表上级目录的某个文件

f=open('../class06/test1.txt','w')
f.write('上级目录的某个文件写入内容')
f.close()      输出结果:test.txt:上级目录的某个文件写入内容

b.绝对路径:文件或目录在磁盘上真正存储的路径

f=open(r'D:\com\VvipClass02\class07\test.txt','w')
f.write('绝对目录模式下写入文件')
f.close()      输出结果:test.txt:绝对目录模式下写入文件

  b.访问模式

    a.访问模式 r、w、a 最基础的操作 r+  w+  a+  、rb wb ab

    b.rwa示例

       a.r

           a.r 代表只读取数据,不能写入数据(写入数据报错)

f=open('test.txt','r')
print(f.read())
f.close()    输出结果:test.txt:r只能读取数据,不能写入数据

   b.没有文件能读取数据吗?(不能)    

f=open('non-existent.txt','r')
com=f.read()
print(com)
f.close()    输出结果:不能读取,报错

       b.w

          a.w代表只写入数据,不能读取数据(读取数据报错)  

f=open('test.txt','w')
f.write('ttttttt')
f.close()    输出结果:test.txt:w只能写入数据,不能读取数据

          b.没有文件能写入数据吗?(能)

f=open('non-existent.txt','w',encoding='utf-8')
f.write('w写入数据,会覆盖原有的内容,没有文件,会创建文件写入数据')
f.close()    输出结果:test.txt:w写入数据,会覆盖原有的内容,没有文件,会创建文件写入数据

          c.乱码原因解决策略

乱码原因:写入的方式gbk,pycharm读取的时候是utf-8读取

解决策略:让读取写入的方式一致

       c.a

          a.a代表只追加数据         

f=open('text.txt','a')
f.write('a往内容后面添加内容')
f.close()    输出结果:test.txt:a往内容后面添加内容

          b.没有文件能追加数据吗?(能)

f=open('non-existent.txt','a')
f.write('a往内容后面添加内容')
f.close()    输出结果:non-existent.txt:a往内容后面添加内容

    c.rwa和r+w+a+

a. r:r   表示只可读不可写(写入数据报错),没有文件不能读取

b.w:w  表示只可写不可读(读取数据报错),没有文件也能读取(写会覆盖原有的内容)

c.a:a  表示仅追加数据,没有文件也能追加

d.r+:r+ 表示即可读又可写(在r的基础上增加了写入),没有文件不能读取

e.w+:w+  表示即可写又可读(在w的基础上增加了读取),没有文件也能读取(写会覆盖原有的内容)

f.a+:a+  表示仅追加数据,没有文件也能追加

    d.rb wb ab二进制文件

      a.二进制文件:用txt不能打开的就是二进制文件

      b.文本文件:用txt能打开的就是文本文件

    e.读取文件的操作

a.read():读取整个文件

f=open('test.txt','r')
print(f.read())  

  输出结果:

test.txt文件内容:
aa
bb

b.readline():每次读取一行数据  

f=open('test.txt','r')
print(f.readline())

输出结果:

test.txt:
aa

c.readlines():一次性读取所有内容,并且放在列表中

f=open('test.txt','r')
print(f.readlines())

输出结果:

test.txt:
['aa\n', 'bb']

    f.读取文件的方式

with open(路径,模式) as 变量名:
  代码块

with open('test.txt','r') as f:
  print(f.read())

输出结果:

test.txt
aa
bb

3、文件和文件夹的操作

a.os模块:提供了很多方法去处理和操作文件目录  导包(import os)

b.创建文件夹(创建同名文件夹无法创建)

file1=r'D:\com\VvipClass02\class07\aa'
os.mkdir(file1)

输出结果:

若aa文件夹不存在,创建成功
若aa文件夹已存在,创建失败

c.删除文件夹(只有目录是空的就能删除)

file1=r'D:\com\VvipClass02\class07\aa'
os.rmdir(file1)

输出结果:

若aa文件夹目录已为空,删除成功
若aa文件夹目录不为空,删除成功

d.删除文件夹(即便目录非空的也能删除)

file1=r'D:\com\VvipClass02\class07\aa'
import shutil
shutil.rmtree(file1)

输出结果:若aa文件夹目录不管为空还是不为空,删除成功

e.文件重命名

os.rename('test1.txt','test2.txt')
os.rename('aa','bb')

输出结果:

test1.txt已修改为:test2.txt
aa文件夹已修改为:bb

f.获取当前路径的文件夹绝对路径:

    print(os.getcwd())

输出结果:D:/com/VvipClass02/class07

g.获取当前路径的绝对路径

print(os.path.abspath(__file__))

输出结果:D:/com/VvipClass02/class07/demo07.py

h.__file__当前文件的路径

  print(__file__)

    输出结果:D:/com/VvipClass02/class07/demo07.py

i.当前路径的父目录:os.path.dirname()文件名

print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

b=os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'config')
print(b+'\conf.ini')

  输出结果:D:/com/VvipClass02/config\conf.ini

j.判断是否为目录

f=r'D:\com\VvipClass02\config'
print(os.path.isdir(f))

  输出结果:True

k.判断是否为文件

f=r'D:\com\VvipClass02\config'
print(os.path.isfile(f))

  输出结果:Flase

l.获取文件权限 os.access(path,mode)
  F_OK(是否存在),R_OK(可读) w_ok(可写) X_OK(可执行)
  file2=r'D:\vip\vvipclass01\class07\test.txt'
  print(os.access(file2,os.F_OK))  输出结果:true
  print(os.access(file2,os.R_OK))  输出结果:true
  print(os.access(file2,os.W_OK))  输出结果:true
  print(os.access(file2,os.X_OK))  输出结果:true

 

4、正则表达式

a.它用来处理字符串 特点:灵活性特别强
b.匹配规则
  \d 匹配数字 \D
  \w字母,数字,下划线,中文
  .匹配任意字符,除\n以外
  {}前面的元素出现的次数
  ?非贪婪模式 匹配1个或者0个表达式
  +匹配1个或者多个表达式
  *匹配0个或者多个表达式
c.导入相关包:import re
d.常用的方法
  match()只匹配开头
  search()只匹配一次
  findall()全匹配
e.匹配示例:str1='123.,.,.,wowo?开始123'
  a.仅把数字匹配出来,若没匹配出来会是一个none  (group():分解)
    a=re.match('\d+',str1).group()   print(a)  输出结果:123
    a=re.search('\d+',str1).group()  print(a)  输出结果:123
    a=re.findall('\d+',str1) print(a)     输出结果:['123', '123']
  b.仅匹配字母,数字,下划线和中文,其他不匹配
    a=re.findall(r'\w+',str1)   print(a)   输出结果:['123', 'wowo', '开始_123']

posted on   隆江猪脚饭  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示