python基础 文件

文件

 编码格式
  Python解释器使用的是Unicode
  .py文件在磁盘上使用UTF-8存储
 文件读写原理
  文件的读写俗称‘IO操作’
  文件读写操作流程
00
   内置函数open()创建文件对象
    通过IO流将磁盘文件中的内容与程序中的对象中的内容进行同步
   语法规则
    file = open(filename[,mode,encoding])
    被创建的文件对象 = 创建文件对象的函数(要创建或打开的文件名称[,打开模式,默认为只读, 编码格式,默认为gbk]
 文件读写操作
if __name__ == "__main__":
    file = open('a.txt', 'r', encoding='utf-8')
    text = file.readlines()

text = [line.strip('\n') for line in text]
print(text)
file.close()
0
 常用的文件打开模式
   文件的类型
    按文件中数据的组织形式,文件可分为两大类:
    文本文件:存储的是普通‘字符’文本,默认为unicode字符集,可以使用记事本程序打开
    二进制文件:把数据内容用字节进行存储,无法用记事本打开,必须使用专用的软件打开,例:MP3文件,jpg文件,doc文档等
打开模式
描述
r
以只读模式打开文件,文件的指针将会放在文件的开头
w
以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头
a
以追加模式打开文件,如果问件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加,文件指针在原文件末尾
b
以二进制方式打开文件,不能单独使用,需要与其它模式一起使用,rb或wb
+
一度写方式打开文件,不能单独使用,需要与其他模式一起使用,如a+
if __name__ == "__main__":
    file = open('a.txt', 'rb', encoding='utf-8')
    text = file.readlines()
text = [line.strip('\n') for line in text]
print(text)
file.close()

file1 = open('b.txt', 'w', encoding='utf-8')
file1.write('Python')
file1.close()

file1 = open('b.txt', 'a', encoding='utf-8')
file1.write('Python')
file1.close()

src_file = open('aa.png', 'rb')
target_file = open('copyaa.png', 'wb')
target_file.write(src_file.read())
target_file.close()
src_file.close()
0
 文件对象常用的方法
方法名
说明
read([size])
从文件中读取size个字节或字符的内容返回。若省略,则一次读完文件所有内容
readline()
从文本文件中读取一行内容
readlines()
从文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str)
将字符串str内容写入文件
writelines(s_list)
将字符串列表s_list写入文本文件,不添加换行符
seek(offset[,whence])
把文件指针移动到新的位置,offset表示相对于whence的位置:offset:为正往结束方向移动,为负往开始方向移动
whence不同的值代表不同含义:
0:从文件头开始计算(默认值)
1:从当前位置开始计算
2:从文件为开始计算
tell()
返回文件指针的当前位置
flush()
把缓冲区的内容写入文件,但不关闭文件
close()
把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源
file1 = open('b.txt', 'a', encoding='utf-8')
li = ['P', 'Y', 'T']
file1.writelines(li)
file1.close()

file = open('a.txt', 'r', encoding='utf-8')
file.seek(4)
print(file.read())
print(file.tell())
file.close()

file = open('a.txt','a')
file.write('Hello')
file.flush()
file.write(' a')
file.close()
0
 with语句
  with语句可以自动管理上喜爱无资源,不论什么原因跳出with块,都能保证文件正确的关闭,以此达到释放内存的目的
# with 语句
from contextlib import contextmanager
@ contextmanager
def demo():
    print('enter')
    yield 'demo'
    print('exit')
with demo() as value:
    print(value)
0
 目录操作
  os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样
  os模块与os.path模块用于对目录或文件进行操作
函数
说明
getcwd()
返回当前工作目录
listdir(path)
返回指定路径下的文件和目录信息
mkdir(path)
创建目录
makedirs(path1/path2)
创建多级目录
rmdir(path)
删除目录
removedirs(path1/path2)
删除多级目录
chdir(path)
将path设置为当前工作目录
# os模块
import os
os.system('notepad.exe')  # 打开记事本
os.system('calc.exe')  # 打开计算器
os.startfile('D:\yuque-desktop')  # 打开文件夹
print(os.getcwd())  # 显示目录
lst = os.listdir('stud')  # 显示文件夹下所有文件
print(lst)
os.mkdir('new')  # 创建new目录
os.makedirs('news/new')  # 创建多级目录
os.rmdir('new')  # 删除文件
os.removedirs('news/new')  # 删除多级文件夹
os.chdir('stud')  # 将stud设置为当前工作目录

 os.path模块操作目录相关
函数
说明
abspath(path)
用于获取文件或目录的绝对路径
exists(path)
用于判断文件是否存在,是则True,否则False
join(path,name)
将目录与目录或文件名拼接起来
splitext()
分离文件名或扩展名
basename(path)
从一个目录中提取文件名
dirname(path)
从一个路径中提取文件路径,不包括文件名
isdir(path)
用于判断是否为路径
# os.path模块
import os.path
print(os.path.abspath('d.py'))
print(os.path.exists('demo.py'))
print(os.path.join('d:\\python', 'a.py'))
print(os.path.split('demo.py'))
print(os.path.basename('D:\PycharmProjects\pystu\d.py'))
print(os.path.dirname('D:\PycharmProjects\pystu\d.py'))
print(os.path.isdir('D:\PycharmProjects\pystu\d.py'))

 其他
# os
# 显示当前目录
import os
print("当前工作目录:", os.getcwd())  # 第一种

from pathlib import Path  # 第二种
print("当前工作目录:", Path.cwd())

# 建立一个新目录
os.mkdir('test_folder')  # 在当前文件夹创建新目录
print("目录是否存在:", os.path.exists("test_folder"))

# 创建包含子目录的目录
os.makedirs('tmp/level')
print("目录是否存在:", os.path.exists('tmp/level'))

# os.access()方法适用当前的uid/gid尝试访问路径
import os
print(os.access('a.txt', os.F_OK))  # 测试path是否存在
print(os.access('a.txt', os.R_OK))  # 测试path是否可读
print(os.access('a.txt', os.W_OK))  # 测试path是否可写
print(os.access('a.txt', os.X_OK))  # 测试path是否可执行

# os.chdir()方法用于改变当前目录到指定的路径
import os, sys
path = r'D:\PycharmProjects\pystu\a'
# 查看当前工作目录
retval = os.getcwd()
print("当前工作目录%s" % retval)
# 修改当前工作目录
os.chdir(path)
# 查看修改后的工作目录
retval = os.getcwd()
print("目录修改成功,当前目录%s" % retval)

# os.chflags()方法设置路径的标记为数字标记,只支持Unix,会报错:AttributeError: module 'os' has no attribute 'chflags'
import os, stat
path = 'a.txt'
flags = stat.SF_NOUNLINK
retval = os.chflags(path,flags)
print('返回值:%s' % retval)

# os.chmod()方法用于更改文件或目录的权限
import os, sys, stat
os.chmod('a.txt', stat.S_IXGRP)  # 组用户有执行权限
os.chmod('a.txt', stat.S_IWOTH)  # 设置文件可以被其他用户写入
os.chmod('a.txt', stat.S_IXOTH)  # 其他用户有执行权
os.chmod('a.txt', stat.S_IROTH)  # 其他用户有读权限
os.chmod('a.txt', stat.S_IRWXO)  # 其他用户有全部权限
os.chmod('a.txt', stat.S_IXGRP)  # 组用户有执行权
os.chmod('a.txt', stat.S_IWGRP)  # 组用户有写权限
os.chmod('a.txt', stat.S_IRGRP)  # 组用户有读权限
os.chmod('a.txt', stat.S_IRWXG)  # 组用户有全部权限
os.chmod('a.txt', stat.S_IXUSR)  # 拥有者具有执行权限
os.chmod('a.txt', stat.S_IWUSR)  # 拥有者具有写权限
os.chmod('a.txt', stat.S_IRUSR)  # 拥有者具有读权限
os.chmod('a.txt', stat.S_IRWXU)  # 拥有者具有全部权限
os.chmod('a.txt', stat.S_ISVTX)  # 目录里文件目录只有拥有者才可删除更改
os.chmod('a.txt', stat.S_ISGID)  # 执行此文件其进程有效组为文件所在组
os.chmod('a.txt', stat.S_ISUID)  # 执行此文件其进程有效用户为文件所有者
os.chmod('a.txt', stat.S_IREAD)  # windows下设为只读
os.chmod('a.txt', stat.S_IWRITE)  # windows下取消只读

# os.chown()方法用于改变当前目录文件所有者,unix有效
import os,sys
os.chown('a.txt', 100, -1)  # 设置所有者ID为100
0
posted @ 2022-07-25 10:41  乌醍  阅读(75)  评论(0编辑  收藏  举报