2.4、Python文件对象及os、os.path和pickle模块(0530)

Wesley13
• 阅读 307

文件系统和文件

1、文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构---即在磁盘上组织文件的方法;

  • 文件系统模块:os

2、计算机文件(称文件、电脑档案、档案),是存储在某种长期储存设备或临时存储设备中的一段数据流,并且归属于计算机文件系统管理之下;

3、概括来讲:

  • 文件是计算机中由OS管理的具有名字的存储区域;
  • 在Linux系统上,文件被看做是字节序列

2.4、Python文件对象及os、os.path和pickle模块(0530)


python打开文件

1、python内置函数 open() 用于打开文件和创建文件对象

  • open('/var/log/message.log','r')

2、open方法可以接收三个参数:文件名、模式和缓冲区参数

  • open函数返回的是一个文件对象
  • mode:指定文件的打开模式
  • bufsize:定义输出缓存
  • 0:表示无输出缓存
  • 1:表示使用缓冲
  • 负数:表示使用系统默认设置
  • 正数:表示使用近似指定大小缓冲

文件方法

2.4、Python文件对象及os、os.path和pickle模块(0530)

2.4、Python文件对象及os、os.path和pickle模块(0530)

创建对象后返回的是一个内存地址,通常需要一个变量名来引用这个内存地址


文件的打开模式:

1、简单模式

  • r:只读
  • open('/var/log/message.log','r')    //以只读模式打开文件
  • w:写入      //从文件指针出开始覆盖
  • a:附加      //从文件尾部

2、在模式后使用  “+”  表示同时支持输入、输出操作

  • 如r+、w+和a+       //比如w+表示读写模式的写操作,本来是写操作,也可以读

3、在模式后附加 “b” 表示以二进制方式打开

  • 如rb、wb+

文件对象:文本都是字节序列


var_name = open (file_name[mode,[bufsize]])

  • mode:

  • r、w、a、r+、w+、a+

  • b表示以二进制模式打开文件

  • rb、wb、ab、rb+、wb+、ab+

  • 缓存:

  • 0:禁用,表示不使用缓存

  • 负数:表示使用系统默认的缓存

  • 1:表示使用缓存,只缓冲一行数据

  • 2+:指定缓冲空间大小,整数表示使用大小的缓冲区

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)


如何移动指针

file.seek(offset[whence])

whence:起点(从什么地方开始偏移)

    • 0:从文件头,默认
    • 1:从当前位置
    • 2:从文件尾

offset:偏移量

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

read表示读多少个字节的,readline表示读行的

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)
  •  2.4、Python文件对象及os、os.path和pickle模块(0530)
  • 2.4、Python文件对象及os、os.path和pickle模块(0530)
  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

flush  刷写缓冲区    close关闭文件

练习:输入1到10之间所有正整数平方的结果写到一个文件

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)        2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)     2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)


readlines

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

迭代的方式是不会移动指针的,比如next,只是一次返回一个行对象

但是 readline 却可以移动指针

  • 2.4、Python文件对象及os、os.path和pickle模块(0530) 2.4、Python文件对象及os、os.path和pickle模块(0530)

truncate    做文件截取

定义保留10个字节                                                              如果想要截取文件,只保留当前光标所在位置以前的值,把指针以后的值全部删除

2.4、Python文件对象及os、os.path和pickle模块(0530) 2.4、Python文件对象及os、os.path和pickle模块(0530)


**closed **  是属性,不是方法,显示文件是否关闭

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

name    表示列表中保存的文件名

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

encoding    保存文件的编码格式,如果无显示则是默认编码

2.4、Python文件对象及os、os.path和pickle模块(0530)


mode    获取当前文件打开的模式

 2.4、Python文件对象及os、os.path和pickle模块(0530)


newlines     行结束字串

2.4、Python文件对象及os、os.path和pickle模块(0530)


softspace   软空间,其中1表示在输出一段数据后要加上一个空格符,0表示不加

上面writeline写入文件中没有空格

f1.softspace = 1    //可以赋值


python文件对象访问指的是文件

这种文件是非目录以外的其他部分,而目录不可以,目录是文件系统的组成部分,不是文件内容的组成部分

如果要使用目录还要使用文件系统,跟文件系统打交道,文件系统模块:os

目录:

chdir():         切换工作目录

chroot():       设定当前进程的根目录

listdir():         列出指定目录下的所有文件名

mkdir():         创建指定目录

makedirs():   创建多级目录      os.makedirs('x/y/z')

getcwd():      获取工作目录

rmdir():          删除目录

removedirs():删除多级目录

编程文件系统交互接口API

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

文件:

mkfifo():    创建管道

mknod():   创建设备文件    mknod(filename [, mode=0600, device])

remove():  删除文件

unlink():    删除链接文件

rename(): 重命名

stat():       返回文件的状态信息

symlink(): 创建符号链接        symlink(src, dst)

2.4、Python文件对象及os、os.path和pickle模块(0530)

utime():更新时间戳

tmpfile():创建并打开(w+b)一个新的临时文件

walk():创建目录树

    • 2.4、Python文件对象及os、os.path和pickle模块(0530)

访问权限相关的

access():检验某个用户或用户组的权限模式

chmod():修改权限

chown():修改属主和属组

umask():设置默认权限模式

access

    • 2.4、Python文件对象及os、os.path和pickle模块(0530)

chmod

    • 2.4、Python文件对象及os、os.path和pickle模块(0530)

chown

    • 2.4、Python文件对象及os、os.path和pickle模块(0530)

文件描述符:

open():底层操作系统的open(),相当于库中的open()函数

read():较底层IO的读操作

write():较底层IO的写操作


设备文件:

makedev():创建设备文件

major():获取主设备号

minor():获取次设备号


import os.path:路径管理

basename():路径基名

dirname():路径目录名

join():整合文件名

split():分割,返回dirname(),basename()元组

splitext():返回(filename,extension)元组,把文件名和扩展名切割开

join

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

split

  • 2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 信息:

getatime():返回指定文件最近一次的访问时间

getctime():

getmtime():

getsize():返回文件的大小

2.4、Python文件对象及os、os.path和pickle模块(0530)

  • 查询

exists():判断指定文件是否存在

isabs():判断指定的路径是否为绝对路径

isdir():是否为目录

isfile():是否存在为文件

islink():是否为符号链接

ismount():是否为挂载点

samefile():两个路径是否指向了同一个文件

2.4、Python文件对象及os、os.path和pickle模块(0530)


练习:

判断文件是否存在,存在则打开;让用户通过键盘反复输入多行数据;追加保存至此文件中

2.4、Python文件对象及os、os.path和pickle模块(0530)


使用一种机制,把对象做流式化, 流式化的结果要求是:如果后期再把流式化结果载入回来的时候还是原来的样子;

因此想要保存原有数据的结构,就必须使用流式化工具(扁平化工具)转换成数据流保存在文件中,还可以再读回来,这种功能就叫对象的持久储存;

要实现对象的持久储存,要使用专门的模块来实现。

对象持久存储(模块)

1、把对象储存到文件中的模块

  • pickle
  • marshal

2、数据管理系统

  • DBM接口:把数据存到数据库中 (python没有自带能够把数据存到MySQL中的API)

DBM接口仅仅能将数据写道DBM数据库中去,但没有办法实现流式化

3、既能实现流式化又能往数据库中存

  • shaelve模块

基于 pickle 模块直接将 python 原生对象存到文件中(这里是将字典存到文件中去)

help(pickle.dump)

dump(obj, file, protocol=None)

2.4、Python文件对象及os、os.path和pickle模块(0530)

2.4、Python文件对象及os、os.path和pickle模块(0530)

2.4、Python文件对象及os、os.path和pickle模块(0530)

使用load模块将将流式化结果还原回来,仍然用字典模式显示

 2.4、Python文件对象及os、os.path和pickle模块(0530)

为什么很多内存对象需要流式化?

因为对象有自己内置的结构,比如上面的花括号( { ) 或者 ( : )等,这些是无法当成一个字符串存进去的,

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这