📜  Python目录管理

📅  最后修改于: 2022-05-13 01:55:01.823000             🧑  作者: Mango

Python目录管理

目录是在计算机上存储、组织和分离文件的一种方式。没有父目录的目录称为根目录。到达文件的方式称为路径。该路径包含目录名称、由斜杠和冒号分隔的文件夹名称的组合,这提供了到系统中文件的路径。

使用Python进行目录管理

Python包含几个模块,这些模块具有许多用于操作和处理数据的内置函数。 Python还提供了帮助我们与操作系统和文件交互的模块。这些类型的模块也可以用于目录管理。下面列出了提供这些功能的模块:

  • os 和 os.path
  • 文件cmp
  • 临时文件
  • 舒蒂尔

os 和 os.path 模块

os 模块用于以各种方式处理文件和目录。它提供了创建/重命名/删除目录的规定。这甚至允许知道当前的工作目录并将其更改为另一个。它还允许将文件从一个目录复制到另一个目录。下面解释用于目录管理的主要方法。

创建新目录:

  • os.mkdir(name)方法来创建一个新目录。
  • 新目录的所需名称作为参数传递。
  • 默认情况下,它会在当前工作目录中创建新目录。
  • 如果必须在其他地方创建新目录,则必须指定该路径,并且该路径应包含正斜杠而不是反斜杠。
Python3
import os
 
# creates in current working directory
os.mkdir('new_dir') 
 
# creates in D:\
os.mkdir('D:/new_dir')


Python3
import os
 
print("String format :", os.getcwd())
print("Byte string format :", os.getcwdb())


Python3
import os
 
os.rename('file1.txt','file1_renamed.txt')


Python3
import os
 
os.renames('file1.txt', 'D:/file1_renamed.txt')


Python3
import os
 
print("Current directory :", os.getcwd())
 
# Changing directory
os.chdir('/home/nikhil/Desktop/')
print("Current directory :", os.getcwd())


Python3
import os
 
print("The files in CWD are :",os.listdir(os.getcwd()))


Python3
import os
 
dir_li=os.listdir('k:/files')
 
if len(dir_li)==0:
  print("Error!! Directory not empty!!")
else:
  os.rmdir('k:/files')


Python3
import os
 
# current working directory of
# GeeksforGeeks
cwd='/'
print(os.path.isdir(cwd))
 
# Some other directory
other='K:/'
print(os.path.isdir(other))


Python3
import os
 
print(os.path.getsize(os.getcwd()))


Python3
import os
import datetime as dt
 
print("Before conversion :")
 
# returns seconds since epoch
print("last access time :",os.path.getatime(os.getcwd()))
print("last modification time :",os.path.getmtime(os.getcwd()))
 
print("After conversion :")
 
# formatting the return value
access_time=dt.datetime.fromtimestamp(os.path.getatime(os.getcwd())).strftime('%Y-%m-%d %I:%M %p')
modification_time=dt.datetime.fromtimestamp(os.path.getmtime(os.getcwd())).strftime('%Y-%m-%d %I:%M %p')
 
print("last access time :",access_time)
print("last modification time :",modification_time)


Python3
import filecmp as fc
import os
 
dir_1 = dir_2 = os.getcwd()
 
# creating object and invoking constructor
d = fc.dircmp(dir_1, dir_2, ignore=None, hide=None)
 
print("comparison 1 :")
d.report()


Python3
import filecmp as fc
import os
 
dir_1 = dir_2 = os.getcwd()
 
# creating object and invoking constructor
d = fc.dircmp(dir_1, dir_2, ignore=None, hide=None)
 
print("comparison 2 :")
d.report_partial_closure()


Python3
import filecmp as fc
import os
 
dir_1 = dir_2 = os.getcwd()
 
# creating object and invoking constructor
d = fc.dircmp(dir_1, dir_2, ignore=None, hide=None)
 
print("comparison 3 :")
d.report_full_closure()


Python3
import tempfile as tf
 
f = tf.mkdtemp(suffix='', prefix='tmp')
print(f)


Python3
import tempfile as tf
 
f = tf.TemporaryDirectory(suffix='', prefix='tmp')
print("Temporary file :", f.name)
 
f.cleanup()


获取当前工作目录 (CWD):

  • os.getcwd()可以使用。
  • 它返回一个字符串,表示当前工作目录的路径。
  • os.getcwdb()也可以使用,但它返回一个表示当前工作目录的字节字符串。
  • 这两种方法都不需要传递任何参数。

Python3

import os
 
print("String format :", os.getcwd())
print("Byte string format :", os.getcwdb())

输出:

String format : /home/nikhil/Desktop/gfg
Byte string format : b'/home/nikhil/Desktop/gfg'

重命名目录:

  • os.rename()方法用于重命名目录。
  • 传递的参数是 old_name 后跟 new_name。
  • 如果传递了 new_name 的目录已经存在,则在 Unix 和 Windows 的情况下都会引发 OSError。
  • 如果一个文件已经以 new_name 存在,在 Unix 中不会出现错误,该目录将被重命名。但在 Windows 中,不会发生重命名,并且会引发错误。
  • os.renames('old_name','dest_dir:/new_name')方法的工作方式与os.rename()类似,但它将重命名的文件移动到指定的目标目录(dest_dir)。

例如,假设当前工作目录中有一个名为“file1.txt”的文件。现在只需重命名它:

Python3

import os
 
os.rename('file1.txt','file1_renamed.txt')

如果需要重命名文件并将其移动到其他目录,则代码片段应为:

Python3

import os
 
os.renames('file1.txt', 'D:/file1_renamed.txt')

更改当前工作目录 (CWD):

  • 计算机系统中的每个进程都会有一个与之关联的目录,称为当前工作目录(CWD)。
  • os.chdir()方法用于更改它。
  • 传递的参数是希望转移到的所需目录的路径/名称。

表单示例,如果我们需要将 CWD 更改为 D:/ 中的 my_folder,则使用以下代码段。

Python3

import os
 
print("Current directory :", os.getcwd())
 
# Changing directory
os.chdir('/home/nikhil/Desktop/')
print("Current directory :", os.getcwd())

输出:

Current directory : /home/nikhil/Desktop/gfg
Current directory : /home/nikhil/Desktop

列出目录中的文件

  • 一个目录可能包含子目录和其中的许多文件。要列出它们,使用os.listdir()方法。
  • 它要么不带参数,要么只带一个参数。
  • 如果未传递参数,则列出 CWD 的文件和子目录。
  • 如果需要列出除 CWD 之外的任何其他目录的文件,则将该目录的名称/路径作为参数传递。

例如:列出 CWD-GeeksforGeeks(根目录)中的文件

Python3

import os
 
print("The files in CWD are :",os.listdir(os.getcwd()))

输出:

删除目录

  • os.rmdir()方法用于删除/删除目录。
  • 传递的参数是该目录的路径。
  • 当且仅当目录为空时,它才会删除目录,否则会引发 OSError。

例如,让我们考虑一个目录 K:/files。现在要删除它,必须确保它是否为空,然后继续删除。

Python3

import os
 
dir_li=os.listdir('k:/files')
 
if len(dir_li)==0:
  print("Error!! Directory not empty!!")
else:
  os.rmdir('k:/files')


要检查它是否是一个目录:

  • 给定目录名称或路径, os.path.isdir(path)用于验证路径是否为有效目录。
  • 它只返回布尔值。如果给定路径是有效目录,则返回true ,否则返回false

Python3

import os
 
# current working directory of
# GeeksforGeeks
cwd='/'
print(os.path.isdir(cwd))
 
# Some other directory
other='K:/'
print(os.path.isdir(other))


输出
True
False

要获取目录的大小:

  • os.path.getsize(path_name)以字节为单位给出目录的大小。
  • 如果将无效路径作为参数传递,则会引发 OSError。

Python3

import os
 
print(os.path.getsize(os.getcwd()))


输出
4096

获取访问和修改时间:

  • 获取目录的最后访问时间: os.path.getatime (path)
  • 获取目录的lat修改时间: os.path.getmtime(path)
  • 这些方法返回自纪元以来的秒数。要格式化它,可以使用 datetime 模块的 strftime( )函数。

示例:获取 GeeksforGeeks(根)目录的访问和修改时间

Python3

import os
import datetime as dt
 
print("Before conversion :")
 
# returns seconds since epoch
print("last access time :",os.path.getatime(os.getcwd()))
print("last modification time :",os.path.getmtime(os.getcwd()))
 
print("After conversion :")
 
# formatting the return value
access_time=dt.datetime.fromtimestamp(os.path.getatime(os.getcwd())).strftime('%Y-%m-%d %I:%M %p')
modification_time=dt.datetime.fromtimestamp(os.path.getmtime(os.getcwd())).strftime('%Y-%m-%d %I:%M %p')
 
print("last access time :",access_time)
print("last modification time :",modification_time)
输出
Before conversion :
last access time : 1596897099.56
last modification time : 1596897099.56
After conversion :
last access time : 2020-08-08 02:31 PM
last modification time : 2020-08-08 02:31 PM

文件cmp模块

该模块提供了各种功能来执行文件和目录之间的比较。要比较目录,必须为类filecmp.dircmp创建一个对象,该对象描述要忽略哪些文件以及要对此类函数隐藏哪些文件。必须在调用此类的任何函数之前调用构造函数。可以调用构造函数,如下所示:

比较目录的功能:

  1. d.report() :比较调用构造函数时给出的两个目录,并提供有关两个目录中文件列表的摘要。如果找到任何相同的文件,它们也会被列出。公共子目录也打印在输出中。

Python3

import filecmp as fc
import os
 
dir_1 = dir_2 = os.getcwd()
 
# creating object and invoking constructor
d = fc.dircmp(dir_1, dir_2, ignore=None, hide=None)
 
print("comparison 1 :")
d.report()
输出
comparison 1 :
diff / /
Common subdirectories : ['bin', 'boot', 'dev', 'etc', 'home', 'lib', 'lib64', 'media', 'mnt', 'opt', 'proc', 'run', 'sbin', 'srv', 'sys', 'tmp', 'usr', 'var']

2. d.report_partial_closure() :打印出通过的目录之间的比较以及直接公共子目录之间的比较。

Python3

import filecmp as fc
import os
 
dir_1 = dir_2 = os.getcwd()
 
# creating object and invoking constructor
d = fc.dircmp(dir_1, dir_2, ignore=None, hide=None)
 
print("comparison 2 :")
d.report_partial_closure()
输出
comparison 2 :
diff / /
Common subdirectories : ['bin', 'boot', 'dev', 'etc', 'home', 'lib', 'lib64', 'media', 'mnt', 'opt', 'proc', 'run', 'sbin', 'srv', 'sys', 'tmp', 'usr', 'var']

diff /bin /bin
Identical files : ['bash', 'btrfs', 'btrfs-calc-size', 'btrfs-convert', 'btrfs-debug-tree', 'btrfs-find-root', 'btrfs-image', 'btrfs-map-logical', 'btrfs-select-super', 'btrfs-show-super', 'btrfs-zero-log', 'btrfsck', 'btrfstune', 'bunzip2', 'busybox', 'bzcat', 'bzcmp', 'bzdiff', 'bzegrep', 'bzexe', 'bzfgrep', 'bzgrep', 'bzip2', 'bzip2recover', 'bzless', 'bzmore', 'cat', 'chacl', 'chgrp', 'chmod', 'chown', 'chvt', 'cp', 'cpio', 'dash', 'date', 'dd', 'df', 'dir', 'dmesg', 'dnsdomainname', 'domainname', 'dumpkeys', 'echo', 'ed', 'egrep', 'false', 'fgconsole', 'fgrep', 'findmnt', 'fsck.btrfs', 'fuser', 'fusermount', 'getfacl', 'grep', 'gunzip', 'gzexe', 'gzip', 'hostname', 'ip', 'journalctl', 'kbd_mode', 'kill', 'kmod', 'less', 'lessecho', 'lessfile', 'lesskey', 'lesspipe', 'ln', 'loadkeys', 'login', 'loginctl', 'lowntfs-3g', 'ls', 'lsblk', 'lsmod', 'mkdir', 'mkfs.btrfs', 'mknod', 'mktemp', 'more', 'mount', 'mountpoint', 'mt', 'mt-gnu', 'mv', 'nano', 'nc', 'nc.openbsd', 'netcat', 'netstat', 'networkctl', 'nisdomainname', 'ntfs-3g', 'ntfs-3g.probe', 'ntfs-3g.secaudit', 'ntfs-3g.usermap', 'ntfscat', 'ntfscluster', 'ntfscmp', 'ntfsfallocate', 'ntfsfix', 'ntfsinfo', 'ntfsls', 'ntfsmove', 'ntfstruncate', 'ntfswipe', 'open', 'openvt', 'pidof', 'ping', 'ping6', 'plymouth', 'ps', 'pwd', 'rbash', 'readlink', 'red', 'rm', 'rmdir', 'rnano', 'run-parts', 'sed', 'setfacl', 'setfont', 'setupcon', 'sh', 'sh.distrib', 'sleep', 'ss', 'static-sh', 'stty', 'su', 'sync', 'systemctl', 'systemd', 'systemd-ask-password', 'systemd-escape', 'systemd-hwdb', 'systemd-inhibit', 'systemd-machine-id-setup', 'systemd-notify', 'systemd-tmpfiles', 'systemd-tty-ask-password-agent', 'tailf', 'tar', 'tempfile', 'touch', 'true', 'udevadm', 'ulockmgr_server', 'umount', 'uname', 'uncompress', 'unicode_start', 'vdir', 'wdctl', 'which', 'whiptail', 'ypdomainname', 'zcat', 'zcmp', 'zdiff', 'zegrep', 'zfgrep', 'zforce', 'zgrep', 'zless', 'zmore', 'znew']

diff /boot /boot
Common subdirectories : ['grub']

diff /dev /dev
Identical files : ['console', 'core', 'full', 'fuse', 'null', 'ptmx', 'random', 'stderr', 'stdout', 'tty', 'urandom', 'zero']
Common subdirectories : ['.lxd-mounts', 'fd', 'hugepages', 'lxd', 'mqueue', 'net', 'pts', 'shm']
Common funny cases : ['initctl', 'log', 'stdin']

diff /etc /etc
Identical files : ['.pwd.lock', 'adduser.conf', 'at.deny', 'bash.bashrc', 'bash_completion', 'bindresvport.blacklist', 'ca-certificates.conf', 'ca-certificates.conf.dpkg-old', 'crontab', 'crypttab', 'debconf.conf', 'debian_version', 'deluser.conf', 'ec2_version', 'environment', 'fstab', 'fuse.conf', 'gai.conf', 'group', 'group-', 'gshadow', 'gshadow-', 'hdparm.conf', 'host.conf', 'hostname', 'hosts', 'hosts.allow', 'hosts.deny', 'inputrc', 'insserv.conf', 'issue', 'issue.net', 'kernel-img.conf', 'ld.so.cache', 'ld.so.conf', 'legal', 'libaudit.conf', 'locale.alias', 'locale.gen', 'localtime', 'login.defs', 'logrotate.conf', 'lsb-release', 'ltrace.conf', 'machine-id', 'magic', 'magic.mime', 'mailcap', 'mailcap.order', 'manpath.config', 'matplotlibrc', 'mime.types', 'mke2fs.conf', 'modules', 'mtab', 'nanorc', 'networks', 'nsswitch.conf', 'os-release', 'overlayroot.conf', 'overlayroot.local.conf', 'pam.conf', 'passwd', 'passwd-', 'popularity-contest.conf', 'profile', 'protocols', 'rc.local', 'resolv.conf', 'rmt', 'rpc', 'rsyslog.conf', 'screenrc', 'securetty', 'services', 'shadow', 'shadow-', 'shells', 'sos.conf', 'subgid', 'subgid-', 'subuid', 'subuid-', 'sudoers', 'sysctl.conf', 'timezone', 'ucf.conf', 'updatedb.conf', 'vtrgb', 'wgetrc', 'zsh_command_not_found']
Common subdirectories : ['NetworkManager', 'X11', 'acpi', 'alternatives', 'apache2', 'apm', 'apparmor', 'apparmor.d', 'apport', 'apt', 'bash_completion.d', 'binfmt.d', 'byobu', 'ca-certificates', 'calendar', 'cloud', 'console-setup', 'cron.d', 'cron.daily', 'cron.hourly', 'cron.monthly', 'cron.weekly', 'dbus-1', 'default', 'depmod.d', 'dhcp', 'dpkg', 'emacs', 'fonts', 'groff', 'gss', 'init', 'init.d', 'initramfs-tools', 'insserv', 'insserv.conf.d', 'iproute2', 'iscsi', 'kbd', 'kernel', 'ld.so.conf.d', 'ldap', 'lighttpd', 'logcheck', 'logrotate.d', 'lvm', 'mdadm', 'modprobe.d', 'modules-load.d', 'network', 'newt', 'opt', 'pam.d', 'perl', 'php', 'pm', 'polkit-1', 'pollinate', 'ppp', 'profile.d', 'python', 'python2.7', 'python3', 'python3.5', 'python3.6', 'rc0.d', 'rc1.d', 'rc2.d', 'rc3.d', 'rc4.d', 'rc5.d', 'rc6.d', 'rcS.d', 'resolvconf', 'rsyslog.d', 'security', 'selinux', 'sgml', 'skel', 'ssh', 'ssl', 'sudoers.d', 'sysctl.d', 'systemd', 'terminfo', 'tmpfiles.d', 'udev', 'ufw', 'update-manager', 'update-motd.d', 'update-notifier', 'vim', 'vmware-tools', 'xdg', 'xml']

diff /home /home
Identical files : ['e94ae880c0dbde73291e3fa78cd4c133.py']

diff /lib /lib
Identical files : ['cpp', 'klibc-k3La8MUnuzHQ0_kG8hokcGAC0PA.so', 'libhandle.so.1', 'libhandle.so.1.0.3']
Common subdirectories : ['apparmor', 'cryptsetup', 'hdparm', 'ifupdown', 'init', 'lsb', 'modprobe.d', 'modules', 'modules-load.d', 'open-iscsi', 'recovery-mode', 'resolvconf', 'systemd', 'terminfo', 'udev', 'ufw', 'x86_64-linux-gnu', 'xtables']

diff /lib64 /lib64
Identical files : ['ld-linux-x86-64.so.2']

diff /media /media

diff /mnt /mnt

diff /opt /opt

diff /proc /proc
Identical files : ['buddyinfo', 'cgroups', 'cmdline', 'consoles', 'cpuinfo', 'crypto', 'devices', 'diskstats', 'dma', 'execdomains', 'fb', 'filesystems', 'interrupts', 'iomem', 'ioports', 'kallsyms', 'kcore', 'key-users', 'keys', 'kmsg', 'kpagecgroup', 'kpagecount', 'kpageflags', 'loadavg', 'locks', 'mdstat', 'meminfo', 'misc', 'modules', 'mounts', 'mtrr', 'pagetypeinfo', 'partitions', 'sched_debug', 'schedstat', 'slabinfo', 'softirqs', 'stat', 'swaps', 'sysrq-trigger', 'timer_list', 'timer_stats', 'uptime', 'version', 'version_signature', 'vmallocinfo', 'vmstat', 'zoneinfo']
Common subdirectories : ['1', '265', '29568', '29569', '29570', '348', '350', '354', '359', '363', '364', '374', '395', '413', '440', '441', '442', '55', '58', 'acpi', 'bus', 'driver', 'fs', 'irq', 'net', 'scsi', 'self', 'sys', 'sysvipc', 'thread-self', 'tty']

diff /run /run
Identical files : ['agetty.reload', 'atd.pid', 'crond.pid', 'crond.reboot', 'dhclient.eth0.pid', 'mlocate.daily.lock', 'rsyslogd.pid', 'sshd.pid', 'utmp']
Common subdirectories : ['cloud-init', 'dbus', 'lock', 'log', 'lvm', 'mount', 'network', 'php', 'resolvconf', 'screen', 'sendsigs.omit.d', 'shm', 'sshd', 'sudo', 'systemd', 'udev', 'user', 'uuidd']
Common funny cases : ['acpid.socket', 'apport.socket', 'dmeventd-client', 'dmeventd-server', 'initctl', 'snapd-snap.socket', 'snapd.socket']

diff /sbin /sbin
Identical files : ['MAKEDEV', 'acpi_available', 'agetty', 'apm_available', 'apparmor_parser', 'badblocks', 'blkdiscard', 'blkid', 'blockdev', 'bridge', 'capsh', 'cfdisk', 'cgdisk', 'chcpu', 'cryptdisks_start', 'cryptdisks_stop', 'cryptsetup', 'cryptsetup-reencrypt', 'ctrlaltdel', 'debugfs', 'depmod', 'dhclient', 'dhclient-script', 'dmeventd', 'dmsetup', 'dosfsck', 'dosfslabel', 'dumpe2fs', 'e2fsck', 'e2image', 'e2label', 'e2undo', 'ethtool', 'fatlabel', 'fdisk', 'findfs', 'fixparts', 'fsadm', 'fsck', 'fsck.cramfs', 'fsck.ext2', 'fsck.ext3', 'fsck.ext4', 'fsck.ext4dev', 'fsck.fat', 'fsck.minix', 'fsck.msdos', 'fsck.nfs', 'fsck.vfat', 'fsck.xfs', 'fsfreeze', 'fstab-decode', 'fstrim', 'gdisk', 'getcap', 'getpcaps', 'getty', 'halt', 'hdparm', 'hwclock', 'ifconfig', 'ifdown', 'ifenslave', 'ifenslave-2.6', 'ifquery', 'ifup', 'init', 'insmod', 'installkernel', 'ip', 'ip6tables', 'ip6tables-restore', 'ip6tables-save', 'ipmaddr', 'iptables', 'iptables-restore', 'iptables-save', 'iptunnel', 'iscsi-iname', 'iscsi_discovery', 'iscsiadm', 'iscsid', 'iscsistart', 'isosize', 'kbdrate', 'killall5', 'ldconfig', 'ldconfig.real', 'logsave', 'losetup', 'lsmod', 'lvchange', 'lvconvert', 'lvcreate', 'lvdisplay', 'lvextend', 'lvm', 'lvmchange', 'lvmconf', 'lvmconfig', 'lvmdiskscan', 'lvmdump', 'lvmetad', 'lvmpolld', 'lvmsadc', 'lvmsar', 'lvreduce', 'lvremove', 'lvrename', 'lvresize', 'lvs', 'lvscan', 'mdadm', 'mdmon', 'mii-tool', 'mkdosfs', 'mke2fs', 'mkfs', 'mkfs.bfs', 'mkfs.cramfs', 'mkfs.ext2', 'mkfs.ext3', 'mkfs.ext4', 'mkfs.ext4dev', 'mkfs.fat', 'mkfs.minix', 'mkfs.msdos', 'mkfs.ntfs', 'mkfs.vfat', 'mkfs.xfs', 'mkhomedir_helper', 'mkntfs', 'mkswap', 'modinfo', 'modprobe', 'mount.fuse', 'mount.lowntfs-3g', 'mount.ntfs', 'mount.ntfs-3g', 'mount.vmhgfs', 'nameif', 'ntfsclone', 'ntfscp', 'ntfslabel', 'ntfsresize', 'ntfsundelete', 'on_ac_power', 'pam_extrausers_chkpwd', 'pam_extrausers_update', 'pam_tally', 'pam_tally2', 'parted', 'partprobe', 'pivot_root', 'plipconfig', 'plymouthd', 'poweroff', 'pvchange', 'pvck', 'pvcreate', 'pvdisplay', 'pvmove', 'pvremove', 'pvresize', 'pvs', 'pvscan', 'rarp', 'raw', 'reboot', 'resize2fs', 'resolvconf', 'rmmod', 'route', 'rtacct', 'rtmon', 'runlevel', 'runuser', 'setcap', 'setvtrgb', 'sfdisk', 'sgdisk', 'shadowconfig', 'shutdown', 'slattach', 'start-stop-daemon', 'sulogin', 'swaplabel', 'swapoff', 'swapon', 'switch_root', 'sysctl', 'tc', 'telinit', 'tipc', 'tune2fs', 'udevadm', 'unix_chkpwd', 'unix_update', 'ureadahead', 'vconfig', 'veritysetup', 'vgcfgbackup', 'vgcfgrestore', 'vgchange', 'vgck', 'vgconvert', 'vgcreate', 'vgdisplay', 'vgexport', 'vgextend', 'vgimport', 'vgimportclone', 'vgmerge', 'vgmknodes', 'vgreduce', 'vgremove', 'vgrename', 'vgs', 'vgscan', 'vgsplit', 'wipefs', 'xfs_repair', 'xtables-multi', 'zramctl']

diff /srv /srv

diff /sys /sys
Common subdirectories : ['block', 'bus', 'class', 'dev', 'devices', 'firmware', 'fs', 'hypervisor', 'kernel', 'module', 'power']

diff /tmp /tmp
Common subdirectories : ['.ICE-unix', '.Test-unix', '.X11-unix', '.XIM-unix', '.font-unix']

diff /usr /usr
Common subdirectories : ['bin', 'games', 'include', 'lib', 'local', 'sbin', 'share', 'src']

diff /var /var
Common subdirectories : ['backups', 'cache', 'crash', 'lib', 'local', 'lock', 'log', 'mail', 'opt', 'run', 'snap', 'spool', 'tmp']

3. d.report_full_closure() :与上一个相同,但递归地完成工作。它比较并显示了常见的子目录,相同的文件和常见的搞笑案例(这两个东西类型不匹配,即一个是目录,另一个是文件。)

Python3

import filecmp as fc
import os
 
dir_1 = dir_2 = os.getcwd()
 
# creating object and invoking constructor
d = fc.dircmp(dir_1, dir_2, ignore=None, hide=None)
 
print("comparison 3 :")
d.report_full_closure()

临时文件模块:

  • 该模块用于创建临时文件和目录。
  • 这会在操作系统创建的临时目录中创建临时文件和目录。
  • 对于 Windows,可以在以下路径中找到临时文件:

mkdtemp():

  • 它用于通过传递参数后缀、前缀和目录来创建一个临时目录。
  • 后缀和前缀对应于创建的临时目录的命名约定。 suffix 决定文件名应该如何结束,prefix 决定文件名的开头,并且大多设置为 ' tmp '。
  • dir 参数指定应创建临时目录的路径。默认情况下,目录设置为操作系统创建的临时目录。
  • 该临时目录只能由创建者使用创建者的唯一 ID 进行读写和搜索。
  • 创建临时目录的用户负责在工作完成后删除临时目录。
  • 它返回创建的新目录的路径。

Python3

import tempfile as tf
 
f = tf.mkdtemp(suffix='', prefix='tmp')
print(f)
输出
/tmp/tmp0ndvk7p_

临时目录():

  • 该函数使用 mkdtemp() 创建一个临时目录,并且这里也传递了相同的参数。
  • 主要区别在于,作为结果创建的对象充当上下文管理器。
  • 用户不需要手动删除创建的临时文件,文件系统会自动清除。
  • 要获取新创建的临时目录的名称,可以使用object.name
  • 要显式删除临时目录,可以使用cleanup()函数。

Python3

import tempfile as tf
 
f = tf.TemporaryDirectory(suffix='', prefix='tmp')
print("Temporary file :", f.name)
 
f.cleanup()
输出
Temporary file : /tmp/tmpp3wr65fj

关闭模块

该模块涉及对文件和目录的高级操作的数量。它允许将目录从源复制/移动到目标。

shutil.copytree(s, d, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False):

  • 如果 'd' 不存在,则递归地将源目录 (s) 复制到目标目录 (d)。
  • 符号链接也称为符号链接,表示一些虚拟文件或参考文件夹或位于其他地方的文件夹。它可以采用true、false 或省略等值。如果为 true,则源中的符号链接也将作为目标中的符号链接,但不会复制关联的元数据。如果该值为 false 或省略,则将链接文件的内容和元数据复制到目标。
  • 对于忽略,一个可调用的对象,它获取正在访问的目录及其内容,例如 os.listdir() 的返回值,因为 copytree() 是一个递归函数。可以使用此参数命名复制时要忽略的文件。
  • copy2函数用作默认的 copy_function,因为它允许复制元数据。也可以使用copy()、copystat()

shutil.rmtree(路径,ignore_errors=False,onerror=None):

  • 删除整个目录。这克服了os.rmdir()的主要缺点,即只有在目录为空时才会删除目录。
  • 路径应该是一个有效的目录。不接受指向目录的符号链接。
  • 如果 ignore_error 为真,则删除目录时引发的错误将被忽略。如果给出false 或省略,则引发的错误应由onerror参数中提到的错误处理。
  • onerror是一个可调用对象,它接受三个参数,即函数、 path 和 excinfo。第一个是引发异常的函数,下一个是要传递给函数的路径,最后一个是sys.exc_info()返回的异常信息。

shutil.move(s,d):

  • 递归地将源目录移动到指定的目标。
  • 目的地不应该已经存在,如果基于 os.rename() 语义存在,它将被覆盖。