python进阶——4. 处理文件

4.1 字符串的语义

在python2 和 python3中,对字符串的语义是有着很大的区别的。

  • python2
    str:表面上是一个字符串,实际上是一连串的字节。
    Unicode:真正意义上的字符串
    如果存储文件,必须将Unicode转化成str这样连续的字节,就是将Unicode编码。反过来,读取文件时需要将str解码成Unicode。
  • python3
    byte:与py2中的str是同一含义。
    str:是真正意义上的字符串
    在读取、写入文本中,可以在open方法中定义具体的编解码格式。

4.2 设置文件缓冲

在文件内容写入到系统的设备上时,对这些文件进行I\O操作耗时可能会很长,可以使用缓冲区来减少调用时间。文件缓冲区的种类:全缓冲,行缓冲,无缓冲。
全缓冲:当写入缓冲区的大小达到一定限制时,将缓冲区内的数据写入到设备中,缓冲区重新开始缓冲。
行缓冲:在shell等终端设备上,使用的是行缓冲。遇到换行符进行一次输出。
无缓冲:对一些串口来说,无需缓冲区,遇到相关信息直接输出。

在python来说,如何设置缓冲区:
全缓冲:在open函数的buffering设置大于1的整数n,n就是缓冲区的大小;
行缓冲:在open函数的buffering设置等于1;
无缓冲:在open函数的buffering设置0;

4.3 获取文件状态

使用系统os库的stat方法可以获取文件的状态。还有其他方法,例如lstat方法,其与stat区别是,lstat不跟随文件链接。

import os

print(os.stat("D:\workspace\PythonAdvance\chapter3\join_test.py"))

os.stat_result(st_mode=33206, st_ino=1688849860425465, st_dev=217826, st_nlink=1, st_uid=0, st_gid=0, st_size=65, st_atime=1509114824, st_mtime=1509114824, st_ctime=1509114824)

其中st_mode是文件类型,可以通过导入stat模块来解析。

import os
import stat

s = os.stat("D:\workspace\PythonAdvance\chapter3\join_test.py")
print(stat.S_ISDIR(s.st_mode))

False

获取文件的访问权限和可执行权限。

print(stat.S_IXUSR & s.st_mode)
print(stat.S_IRUSR & s.st_mode)

获取文件最后访问时间、获取文件最后修改时间、获取文件最后节点时间。

print(time.localtime(s.st_atime))
print(time.localtime(s.st_ctime))
print(time.localtime(s.st_mtime))

获取文件大小

print(s.st_size)

上面介绍的都是使用os标准库中的常规方法。其实有另外简便的方法,就是使用os.path中封装好的方法。

python进阶——4. 处理文件_第1张图片
os.path中的方法

4.4 使用临时文件

当处理一些采集上来的数据时,这些临时文件如果常驻内存会很占用内存资源,这时,可以通过临时文件的形式。这些临时文件不用命名,也不用手动删除,在关闭之后自动删除掉。。

from tempfile import TemporaryFile, NamedTemporaryFile

f = TemporaryFile()
f.write("adb-------------------------------".encode('utf8'))
f.seek(0)
print(f.read(10))

使用TemporaryFile在文件系统中找不到所创建的临时文件。如果要这个临时文件创建之后能够被找到,就使用NamedTemporaryFile来创建。

g = NamedTemporaryFile()
print(g.name)

C:\Users\HUANGG~1\AppData\Local\Temp\tmpcbe2d6_d

临时文件在关闭之后会自动删除掉,如果不想删除掉,可以在构造器中加入delete=False的参数即可。

你可能感兴趣的:(python进阶——4. 处理文件)