Python零基础教学,从入门到精通,你学到了吗?| Python文件管理--递归实现文件目录树

发布于:2022-12-18 ⋅ 阅读:(619) ⋅ 点赞:(0)

Python内置函数,有8个参数,完整语法如下:

open(file,mode=’r’,buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

除了file,其他7个参数都有默认值。

file是要打开的文件,包含文件路径和文件名,若不配置路径,则会去.py文件同目录搜寻。

mode用于指定文件打开模式,如r,w,a,分别对应读,写,追加的方式,附加模式有b,t,+,分别对应二进制模式,文本模式,读写模式,附加模式需要与基本模式组合使用,如rb表示以二进制只读模式打开文件,rb+表示以二进制读写模式打开文件。

buffering用于指定打开文件使用的缓冲方式,-1表示使用系统默认的缓冲机制。可以是任意正整数,负整数或0,值为任意负整数,效果是相同的;值为0,则表示不使用缓冲区,即缓冲区大小为0,写入和读取都直接与磁盘对接;值为1,则表示缓冲区采用行缓冲区,即只能放一行数据,遇到换行符即清空缓存,将数据存入磁盘;值大于1,这个值表示缓冲区的大小,单位为字节,如200,表示缓冲区大小为200Byte,数据达到200Byte就会写入磁盘。

encoding用于指定文件的编码方式,默认采用UTF-8,常用的还有ascii,gbk等

errors是指编解码报错的处理方式,用于设置党open函数发生编码或解码错误时的处理方式,值为:strict(编解码错误则报错),ignore(编解码出现错误会忽略,不报错),replace(编解码出现错误不会报错,会用?替代要写入或读取的我无法解析的数据)。值得注意的是,当mode参数采用二进制方式时,不可指定该参数值。

newline是指换行符设置,可选值:None、”\r”、”\n”、”\r\n”。Windows采用”\r\n”,MacOSSierra采用”\r”,Unix和Linux使用”\n”

closefd是指传入的file参数类型。Bool类型,为True时,file参数可以是表示文件路径的字符串,也可以是文件描述符;为false时,file参数只能是文件描述符,传入字符串会报错。

opener具体含义暂不清楚。

 os库

os是operation system的缩写,是Python标准库,随Python一起安装,无需单独安装,os库中包含很多操作文件和目录的函数,可以很方便第进行重命名文件、添加/删除目录、复制目录/文件等操作。

使用os库时需要导入:import 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', 'TMP_MAX', 'W_OK', 'X_OK', '_AddedDllDirectory', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_check_methods', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'add_dll_directory', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', '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_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']

基本操作如下图:

 cabe53fd8113420b88aa7faa218f5a8a.png 

    

 shutil 

shutil库也是Python标准库,可以处理文件、文件夹、压缩包,能实现文件复制、移动、压缩、解压缩等功能。

使用时需要导入:import shutil

主要的类和函数如下:

['COPY_BUFSIZE', 'Error', 'ExecError', 'ReadError', 'RegistryError', 'SameFileError', 'SpecialFileError', '_ARCHIVE_FORMATS', '_BZ2_SUPPORTED', '_GiveupOnFastCopy', '_HAS_FCOPYFILE', '_LZMA_SUPPORTED', '_UNPACK_FORMATS', '_USE_CP_SENDFILE', '_WINDOWS', '_ZLIB_SUPPORTED', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_access_check', '_basename', '_check_unpack_options', '_copyfileobj_readinto', '_copytree', '_copyxattr', '_destinsrc', '_ensure_directory', '_fastcopy_fcopyfile', '_fastcopy_sendfile', '_find_unpack_format', '_get_gid', '_get_uid', '_islink', '_make_tarball', '_make_zipfile', '_ntuple_diskusage', '_rmtree_isdir', '_rmtree_islink', '_rmtree_safe_fd', '_rmtree_unsafe', '_samefile', '_stat', '_unpack_tarfile', '_unpack_zipfile', '_use_fd_functions', 'chown', 'collections', 'copy', 'copy2', 'copyfile', 'copyfileobj', 'copymode', 'copystat', 'copytree', 'disk_usage', 'errno', 'fnmatch', 'get_archive_formats', 'get_terminal_size', 'get_unpack_formats', 'getgrnam', 'getpwnam', 'ignore_patterns', 'make_archive', 'move', 'nt', 'os', 'posix', 'register_archive_format', 'register_unpack_format', 'rmtree', 'stat', 'sys', 'unpack_archive', 'unregister_archive_format', 'unregister_unpack_format', 'which']

常用操作函数:

copy复制文件和权限

copy2复制文件和元数据

copyfile将一个文件的内容复制到另一个文件中

copyfileobj将一个文件的内容复制到另一个文件中

copytree复制整个文件目录

move递归地移动文件或目录,原文件或目录将会被删除

rmtree删除一个目录及目录内所有内容

make_archive创建压缩包并返回文件路径

unpack_archive解压缩文件

​​​​​​​ open()与os.open()

open()方法用于打开一个文件,并返回文件对象,高级函数。

os.open()方法用于打开一个文件,并设置需要的打开选项,默认参数mode是可选的,默认值0777,返回值是新打开文件的描述符,底层函数。

open()实际上是对os.open()的封装,问了操作方便则调用内置函数open(),为了效率高则可用os.open()

 

 案例一 统计文件中汉字出现的次数

文档内容如下:

 bb5a38f5062b44afa0af56522df59964.png 

程序:

 5e05589d12d44bf68af7e1f468737365.png 

输出结果:

Counter({'山': 6, '还': 4, '联': 3, '上': 3, '下': 3, '有': 3, '海': 2, '自': 2, '来': 2, '黄': 2, '落': 2, '叶': 2, '牧': 2, '马': 2, '停': 2, '前': 2, '门': 2, '出': 2, '租': 2, '车': 2, '西': 2, '运': 2, '煤': 2, '对': 1, '水': 1, '松': 1, '人': 1, '别': 1, '是': 1, '不': 1})

 案例二 真正的文件类型

在日常工作中,我们常常用文件的扩展名来判断文件类型,其实这不够准确。如果我们修改了文件的扩展名,虽然文件图标和文件类型都发生了变化,但是文件大小没变,文件的内容和本质也没变。

 d137afdb1380428ba629d070f065dc2c.png 

那什么方式才是准确的呢?

准确的方式是查看文档的文档头,也就是前8个字节。

下面我们来用Python查看文档的文件类型:

 01ea82c4a398466b8b7856620920bef1.png 

输出结果:

 96a3e8c2dc254778a4d9c7b584dee66b.png 

可以看出,结果是一样的。

感兴趣的朋友可以试试其他的文档,比如word,pdf,png,rar等,你会发现不一样的世界。

 

 案例三 批量修改文件名称

在文件名称的前面加0,后面加2022,不改变文件的格式。

 17f095a8ed324221a21b66124b982746.png 

输出结果:

 8f6180625d324b858df1433f34469b69.png 

 

 案例四 文件目录图

假设现在我们有一个目录:

文件夹:D:\PycharmProjects\Points

Points文件夹下有0words2022.docx、0words2022.png、0words2022.txt、文件夹points;

points文件夹下又有文件夹0point、0word2022.docx、0word2022.png、0word2022.txt、文件夹point1;

文件夹0point下又有word.docx、word.png

文件夹point1下又有word.docx

图片效果为:

 6e257d639a224b37af73b006f2924855.png 

我们要整理成目录的样子,代码如下:

 b32ef2d4257041e68d9f229dedd50dd5.png 

输出结果:

 6ba07f40b662464a964204001e67f3a6.png 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到