13-Python3之IO操作

系统中的文件,都是二进制文件!机器才能识别并执行操作。

操作系统[软件]–自然人–机器–数据交互的桥梁。

操作系统中的文件:文本文件:记事本打开不会出现乱码的文件!二进制文件:记事本打开会乱码的文件!

python编程语言:对比java:jvm虚拟机->屏蔽了系统安全操作。本身是运维出身!解释器->允许Python可以执行危险操作!

python对于系统文件的操作权限->> java。

python操作系统文件

直接操作文件,和操作系统交互,用到一个模块:os(Operation System)。

扩展:和程序命令交互{python解释器},用到一个模块:sys(system)

文件的操作

[文件也是一种数据]

创建文件open、创建一级文件夹mkdir、创建多级文件夹makedirs
删除文件remove\rmdir\removedirs
重命名文件:rename
查看文件信息:getctime()/getatime()/getmtime()/getsize()
getctime()指create时间,getatime()指access访问时间,getmtime()指modify时间。
遍历文件:isfile()/isdir()/listdir()/scandir(),scandir()需要遍历。

  • 新建文件/文件夹
import os
# 新建文件夹
stat = os.mkdir('d:/work/')  # 返回None
print(stat)
# 新建文件
with open('d:/work/demo.txt', 'x') as f:
    pass
# 返回指定目录下的所有文件和目录名
os.listdir('d:/work/')

tips:创建文件:os.mknod(…)适用于unix/linux操作系统的函数
os.mknod(“d:/oswork/demo01.txt”)

  • 分离扩展名
import os

# 分离扩展名
print('分离扩展名d:/work/demo.txt:')
stat = os.path.splitext('d:/work/demo.txt')
print(stat)
  • 复制粘贴文件
# coding:utf-8

src = 'copy.txt'
dgt = 'past.txt'

# 复制
with open(src, 'r', encoding='utf-8') as f:
    content = f.read()

# 粘贴
with open(dgt, 'w', encoding='utf-8') as f:
    f.write(content)
  • 获取文件名
import os

#获取文件名:
print('获取文件名d:/work/demo.txt:')
result = os.path.basename('d:/work/demo.txt')
print(result)

获取文件名d:/work/demo.txt:
demo.txt

  • 删除文件/文件夹
import os

# 函数用来删除一个文件:
print('删除文件:')
retu = os.remove('d:/works/demo.py')
print(retu)
# 删除多个目录:
print('删除多个目录:')
os.removedirs('d:/works/')   # 无返回值
  • 获取路径名
import os

#获取路径名:
print('获取路径名d:/work/demo.txt:')
result = os.path.dirname('d:/work/demo.txt')
print(result)

获取路径名d:/work/demo.txt:
d:/work

  • 重命名文件名

os.rename(old_file_path, new_file_path),
只能对相应的文件进行重命名, 不能重命名文件的上级目录名。
os.renames(old_file_path, new_file_path),
是os.rename的升级版, 既可以重命名文件, 也可以重命名文件的上级目录名。

import os

os.rename('d:/work/demo.txt', 'd:/work/demo.py')

os.renames('d:/work/demo.py', 'd:/works/demo.py')
  • 查看某个文件夹下所有文件
import os

# 查看某个文件夹下所有文件
# f_list = os.listdir('D:/360驱动大师目录')
# print(f_list)


def chk_files(s_path):

    if os.path.isfile(s_path):
        print("这是一个文件:", s_path)

    if os.path.isdir(s_path):
        print("这是个一个文件夹", s_path)

        f_list = os.listdir(s_path)

        for file in f_list:
            chk_files(s_path + "/" + file)

chk_files("d:/360驱动大师目录")

提示1:dir(os) # 查看系统操作模块
提示2:dir(os.path) # 查看系统文件路径操作模块
提示3:灵活使用help()
扩展:dir(sys) # 和解释器交互的模块。

文件文本内容的操作

打开文件:open()
open(file, mode='r', buffering=-1, encoding=None,errors=None, newline=None, closefd=True, opener=None)
参数列表:
file:要操作的文件对象、或者文件名称[路径(相对路径|绝对路径)]
mode:操作方式

  • t:text,默认操作;文本文件

  • b:binray,操作二进制文件

  • a:append 追加操作文件

  • w: write向文件中写入内容

  • r: read从文件中读取内容

  • +:打开一个文件既可以写入数据也可以读取数据

f = open(filename, mode="rt/wt")
f.write(str)/writelines(list)
f.read()/readline()/readlines()

>>>>>>>> f = open("随堂笔记.txt")  f变量~文件对象
>>> dir(f)
[ 'buffer缓存', 'close关闭', 'closed关了吗?', 'detach',
'encoding编码', 'errors错误', 'fileno', 'flush刷新',
'isatty', 'line_buffering', 'mode模式', 'name名称',
'newlines一行', 'read读取', 'readable可以读取吗?', 
'readline读取一行','readlines全部读取每一行作为一个元素的列表',
'seek跳转指定位置|偏移', 'seekable可以偏移吗?', 'tell',
'truncate', 'writable可以写入吗?', 'write写数据', 
'writelines'写一个列表进入]

系统中的文件:文本文件|二进制文件
拷贝二进制文件:可能出现问题导致文件损坏!

文件二进制内容的操作

和文本文件的操作基本没有区别,将操作模式mode=r->mode=rb/wb。

操作模式~b->binrary->二进制
f = open(filename, mode=“rb/wb”)
f.write(bytes/bytearray)
f.read()

rb:二进制读取文件
wb:二进制写入文件

注意问题:如果要操作二进制文件,read()方法使用要慎重,不要直接read()->造成整个二进制文件会被一次加载到系统内存中容易造成内存溢出。
操作时《需要给read()函数添加一个每次读取数据的缓存,每次读取一定大小的数据。

参数描述
r以只读方式打开文件,该文件必须存在。
r+以可读写方式打开文件,该文件必须存在。
rb+读写打开一个二进制文件,只允许读写数据。
rt+读写打开一个文本文件,允许读和写。
w打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb只写打开或新建一个二进制文件;只允许写数据。
wb+读写打开或建立一个二进制文件,允许读和写。
wt+读写打开或着建立一个文本文件;允许读写。
at+读写打开一个文本文件,允许读或在文本末追加数据。
ab+读写打开一个二进制文件,允许读或在文件末追加数据。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。

with语句快捷操作

快捷处理方式:with语句:是python提供用来快捷操作文件的一种语法结构,主要简化了文件在操作过程中,由于各种失误或者异常造成的文件关闭错误,而衍生出来的一种操作方式。

with语句:自动打开和关闭文件。

with open(file, mode="..") as f:
    f.write()/read()

程序中的数据有独立的数据类型,不能直接按照二进制的方式进行操作。
解决方案有两种:

  1. 通过python提供的标准库,将程序中的数据转换成字符串~进行操作
  2. 通过python提供的标准库,将程序中的数据转换成字节~进行操作

操作程序中的字符串数据[特殊:JSON]

json模块[python提供的标准库]
文本文件操作:json:数据类型的转换。

#将一个程序中的数据,写入到文本文件中
json.dump(dict, open(file, mode="r"))
#从文本文件中读取数据到程序中~直接转换成对应的类型
data = json.load(open(file, mode="w"))

操作程序中的对象数据[序列化:反序列化]

pickle模块[python提供的标准库]
二进制文件操作:pickle:数据的文件操作

#将程序中的数据,写入到二进制文件中
pickle.dump(dict, open(file, mode="wb"))
#从二进制文件中读取数据到程序中
data = pickle.load(open(file, mode="rb"))

os所有方法

>>> dir(os)
['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 
'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 
'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 
'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 
'P_OVERLAY','P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 
'SEEK_SET','__cached__', '__doc__', '__file__', '__loader__', 
'__name__', '__package__', '__spec__', '_execvpe', '_exists', 
'_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', 
'_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 
'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 
'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 
'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 
'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 
'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 
'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 
'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 
'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 
'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 
'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 
'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir',
'sep','set_handle_inheritable', 'set_inheritable', 'spawnl', 
'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 
'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 
'supports_bytes_environ', 'supports_dir_fd', 
'supports_effective_ids', 'supports_fd', 
'supports_follow_symlinks', 'symlink', 'sys', 'system', 
'terminal_size', 'times', 'times_result', 'truncate', 
'umask', 'uname_result', 'unlink', 'urandom', 'utime', 
'waitpid', 'walk', 'write']


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值