系统中的文件,都是二进制文件!机器才能识别并执行操作。
操作系统[软件]–自然人–机器–数据交互的桥梁。
操作系统中的文件:文本文件:记事本打开不会出现乱码的文件!二进制文件:记事本打开会乱码的文件!
python编程语言:对比java:jvm虚拟机->屏蔽了系统安全操作。本身是运维出身!解释器->允许Python可以执行危险操作!
python对于系统文件的操作权限->> java。
直接操作文件,和操作系统交互,用到一个模块: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语句:是python提供用来快捷操作文件的一种语法结构,主要简化了文件在操作过程中,由于各种失误或者异常造成的文件关闭错误,而衍生出来的一种操作方式。
with语句:自动打开和关闭文件。
with open(file, mode="..") as f:
f.write()/read()
程序中的数据有独立的数据类型,不能直接按照二进制的方式进行操作。
解决方案有两种:
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"))
>>> 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']