Python的文件对象(file object)也成为类文件对象(file-like object)或流(stream),文件对象可以是实际的磁盘文件,也可以是其他存储或通信设备,如内存缓冲区、网络、键盘和控制台等。
Python提供一种类似于文件操作的API(如read()方法、write()方法)实现对底层资源的访问。
17.1 文件操作
文件操作主要包括对文件内容的读写操作,这些操作是通过文件对象实现的,通过文件对象可以读写文本文件和二进制文件。
17.1.1 打开文件
文件对象可以通过open()函数获得。语法:
open(file, mode='r', buffering=-1, encoding=None, newline=None, closefd=True, opener=None)
open()函数一共有8个参数,其中参数file和mode是最常用的。
๏ 1. file参数
file参数是要打开的文件,可以是字符串或整数。如果file是字符串表示文件名,文件名可以是相对当前的路径,也可以是绝对路径;如果file是整数表示文件描述符,文件描述符指向一个已经打开的文件。
๏ 2. mode参数
mode参数用来设置文件打开模式。文件打开模式用字符串来表示。
最基本的文件打开模式
b和t是文件类型模式,如果是二进制文件需要设置rb、wb、xb、ab。如果是文本文件需要设置rt、wt、xt、at,由于t是默认模式,所以可以省略为r、w、x、a。
+必须与r、w、x或a组合使用来设置文件为读写模式,对于文本文件可以使用r+、w+、x+、a+,对于二进制文件可以使用rb+、wb+、xb+、ab+。
注意:r+、w+、a+的区别:
r+打开文件时如果文件不存在则抛出异常
w+打开文件时如果文件不存在则创建文件,文件存在则清楚文件内容
a+类似w+,打开文件时如果文件不存在则创建文件,文件存在则在文件末尾追加
๏ 3. buffering参数
buffering是设置缓冲区策略,默认值是-1。
当buffering=-1时系统会自动设置缓冲区,通常是4096字节或8192字节;
当buffering=0时关闭缓冲区,关闭缓冲区时数据直接写入文件,这种模式主要应用在二进制文件的写入操作;
当buffering>0时,buffering用来设置缓冲区字节大小。
提示:使用缓冲区是为了提高效率减少IO操作,文件数据首先放到缓冲区中,当文件关闭或刷新缓冲区时,数据才真正写入文件。
๏ 4. encoding和errors参数
encoding用来指定打开文件时的文件编码,主要用于文本文件的打开。errors参数用来指定编码发生错误时如何处理。
๏ 5. newline参数
newline用来设置换行模式。
๏ 6. closefd和opener参数
这两个参数在file参数为文件描述符时使用。
closefd为True时,文件对象调用close()方法关闭文件,同时也会关闭文件描述符;
closefd为False时,文件对象调用close()方法关闭文件,但文件描述不会关闭。
opener参数用于打开文件时执行的一些加工操作,opener参数执行一个参数,该函数返回一个文件描述符。
提示:文件描述符是一个整数值,它对应到当前程序已经打开的一个文件。例如标准输入文件描述符是0,标准输出文件描述符是1,标准错误文件描述符是2,打开其他文件的文件描述符依次是3、4、5等数字。
f = open('test.txt', 'w+')
# 通过w+模式打开文件test.txt。由于文件test.txt不存在所以会创建test.txt文件
f.write('World')
f = open('test.txt', 'r+')
# 通过r+模式打开文件test.txt,由于已经创建了test.txt文件,r+模式会覆盖所有内容
f.write('Hello')
f = open('test.txt', 'a+')
f.write(' ')
fname = r'C:\Users\21904\Documents\study_python_code\study_python\test.txt'
# 绝对路径是文件名,由于字符串中有反斜杠,要么采用转义字符“\\”表示,要么采用原始字符表示。上面就是原始字符串
# 文件路径中反斜杠“\”也可以改为斜杠“/”,在UNIX和Linux系统中都是采用斜杠分割文件路径。
f = open(fname, 'a+')
f.write('World')
17.1.2 关闭文件
使用open()函数代开文件后,调用文件对象的close()方法关闭文件。否则会出现异常,调用close()方法应该放在异常处理的finally代码块。但是更推荐使用with as代码块进行自动资源管理。
# 使用finally关闭文件
f_name = 'test.txt'
try:
f = open(f_name)
except OSError as e:
print('打开文件失败')
else:
print('打开文件成功')
try:
content = f.read()
print(content)
except OSError as e:
print('处理OSError异常')
finally:
f.close()
# 使用with as自动资源管理
f_name = 'test.txt'
try:
with open(f_name, 'r') as f:
content = f.read()
except OSError as e:
print('打开文件失败')
else:
print('打开文件成功')
try:
print(content)
except OSError as e:
print('处理OSError异常')
17.1.3 文本文件读写
文本 文件读写的单位是字符,而且字符是有编码的。
๏ read(size=-1):从文件中读取字符串,size限制最多读取的字符数,size=- 1时没有限制,读取全部内容。
๏ readline(size=-1):读取到换行符或文件尾并返回单行字符串,如果已经到 文件尾,则返回一个空字符串,size是限制读取的字符数,size=-1时没有 限制。
๏ readlines():读取文件数据到一个字符串列表中,每一个行数据是列表的一 个元素。
๏ write(s):将字符串s写入文件,并返回写入的字符数。
๏ writelines(lines):向文件中写入一个列表,不添加行分隔符,因此通常为 每一行末尾提供行分隔符。
๏ flush():刷新写缓冲区,数据会写入到文件中。
f_name = 'test.txt'
with open(f_name, 'r', encoding='utf-8') as f:
lines = f.readlines()
print(lines)
copy_f_name = 'copy.txt'
with open(copy_f_name, 'w', encoding='utf-8') as copy_f:
copy_f.writelines(lines)
print('文件复制成功')
test.txt文件采用UTF-8编码,打开时指定UTF-8编码
17.1.4 二进制文件读写
二进制文件的单位是字节,不需要考虑编码的问题。
๏ read(size=-1)。从文件中读取字节,size限制读取最多字节数,如果 size=-1则读取全部字节。
๏ readline(size=-1)。从文件中读取并返回一行。size是限制读取的字节数, size=-1没有限制。
๏ readlines()。读取文件数据到一个列表中,每一个行数据是列表的一个元 素。
๏ write(b)。写入b字节,并返回写入的字节数。
๏ writelines(lines)。向文件中写入一个列表。不添加行分隔符,因此通常为 每一行末尾提供行分隔符。
๏ flush()。刷新写缓冲区,数据会写入到文件中
f_name = 'coco2dxcplus.jpg'
with open(f_name, 'rb') as f:
b = f.read()
copy_f_name = 'copy.jpg'
with open(copy_f_name, 'wb') as copy_f:
copy_f.write(b)
print('文件复制成功')
read()方法读取所有数据
17.2 os模块
通过Python程序管理文件或目录,如删除文件、修改文件名、创建目录、删除目录和遍历目录等,可通过Python的os模块实现。
os模块的常用函数:
๏ os.rename(src,dst):修改文件名,src是源文件,dst是目标文件,它们都可以 是相对当前路径或绝对路径表示的文件。
๏ os.remove(path):删除path所指的文件,如果path是目录,则会引发OSError。
๏ os.mkdir(path):创建path所指的目录,如果目录已存在,则会引发 FileExistsError。
๏ os.rmdir(path):删除path所指的目录,如果目录非空,则会引发OSError。
๏ os.walk(top):遍历top所指的目录树,自顶向下遍历目录树,返回值是一个有 三个元素的元组(目录路径,目录名列表,文件名列表)。
๏ os.listdir(dir):列出指定目录中的文件和子目录。
os模块的常用属性:
๏ os.curdir属性:获得当前目录。
๏ os.pardir属性:获得当前父目录。
import os
f_name = 'test.txt'
copy_f_name = 'copy.txt'
with open(f_name, 'r') as f:
b = f.read()
with open(copy_f_name, 'w') as copy_f:
copy_f.write(b)
try:
os.rename(copy_f_name, 'copy2.txt') # 修改文件名
except OSError: # 修改文件名失败情况下删除copy2.txt文件
os.rename('copy2.txt')
print(os.listdir(os.curdir)) # os.curdir获得当前目录,os.listdir()函数是列出指定目录下的文件和子目录
print(os.listdir(os.pardir)) # os.pardir获得当前父目录
try:
os.mkdir('subdir') # 在当前目录下创建子目录subdir
except OSError:
os.rmdir('subdir') # 在创建目录失败时删除subdir子目录
for item in os.walk('.'): # 返回当前目录树下所有目录和文件,然后通过for循环进行遍历
print(item)
运行结果:
C:\Users\21904\AppData\Local\Programs\Python\Python312\python.exe C:\Users\21904\Documents\study_python_code\study_python\char17.py
['.idea', '.venv', 'char15.py', 'char16.py', 'char17.py', 'coco2dxcplus.JPG', 'copy.jpg', 'copy2.txt', 'readme.txt', 'test.txt']
['study_python']
('.', ['.idea', '.venv', 'subdir'], ['char15.py', 'char16.py', 'char17.py', 'coco2dxcplus.JPG', 'copy.jpg', 'copy2.txt', 'readme.txt', 'test.txt'])
('.\\.idea', ['inspectionProfiles'], ['.gitignore', 'misc.xml', 'modules.xml', 'study_python.iml', 'workspace.xml'])
('.\\.idea\\inspectionProfiles', [], ['profiles_settings.xml'])
('.\\.venv', ['Lib', 'Scripts'], ['.gitignore', 'pyvenv.cfg'])
('.\\.venv\\Lib', ['site-packages'], [])
('.\\.venv\\Lib\\site-packages', ['pip', 'pip-23.2.1.dist-info', '__pycache__'], ['pip-23.2.1.virtualenv', '_virtualenv.pth', '_virtualenv.py'])
('.\\.venv\\Lib\\site-packages\\pip', ['_internal', '_vendor'], ['py.typed', '__init__.py', '__main__.py', '__pip-runner__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal', ['cli', 'commands', 'distributions', 'index', 'locations', 'metadata', 'models', 'network', 'operations', 'req', 'resolution', 'utils', 'vcs'], ['build_env.py', 'cache.py', 'configuration.py', 'exceptions.py', 'main.py', 'pyproject.py', 'self_outdated_check.py', 'wheel_builder.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\cli', [], ['autocompletion.py', 'base_command.py', 'cmdoptions.py', 'command_context.py', 'main.py', 'main_parser.py', 'parser.py', 'progress_bars.py', 'req_command.py', 'spinners.py', 'status_codes.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\commands', [], ['cache.py', 'check.py', 'completion.py', 'configuration.py', 'debug.py', 'download.py', 'freeze.py', 'hash.py', 'help.py', 'index.py', 'inspect.py', 'install.py', 'list.py', 'search.py', 'show.py', 'uninstall.py', 'wheel.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\distributions', [], ['base.py', 'installed.py', 'sdist.py', 'wheel.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\index', [], ['collector.py', 'package_finder.py', 'sources.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\locations', [], ['base.py', '_distutils.py', '_sysconfig.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\metadata', ['importlib'], ['base.py', 'pkg_resources.py', '_json.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\metadata\\importlib', [], ['_compat.py', '_dists.py', '_envs.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\models', [], ['candidate.py', 'direct_url.py', 'format_control.py', 'index.py', 'installation_report.py', 'link.py', 'scheme.py', 'search_scope.py', 'selection_prefs.py', 'target_python.py', 'wheel.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\network', [], ['auth.py', 'cache.py', 'download.py', 'lazy_wheel.py', 'session.py', 'utils.py', 'xmlrpc.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\operations', ['build', 'install'], ['check.py', 'freeze.py', 'prepare.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\operations\\build', [], ['build_tracker.py', 'metadata.py', 'metadata_editable.py', 'metadata_legacy.py', 'wheel.py', 'wheel_editable.py', 'wheel_legacy.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\operations\\install', [], ['editable_legacy.py', 'wheel.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\req', [], ['constructors.py', 'req_file.py', 'req_install.py', 'req_set.py', 'req_uninstall.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\resolution', ['legacy', 'resolvelib'], ['base.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\resolution\\legacy', [], ['resolver.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\resolution\\resolvelib', [], ['base.py', 'candidates.py', 'factory.py', 'found_candidates.py', 'provider.py', 'reporter.py', 'requirements.py', 'resolver.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\utils', [], ['appdirs.py', 'compat.py', 'compatibility_tags.py', 'datetime.py', 'deprecation.py', 'direct_url_helpers.py', 'egg_link.py', 'encoding.py', 'entrypoints.py', 'filesystem.py', 'filetypes.py', 'glibc.py', 'hashes.py', 'inject_securetransport.py', 'logging.py', 'misc.py', 'models.py', 'packaging.py', 'setuptools_build.py', 'subprocess.py', 'temp_dir.py', 'unpacking.py', 'urls.py', 'virtualenv.py', 'wheel.py', '_jaraco_text.py', '_log.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_internal\\vcs', [], ['bazaar.py', 'git.py', 'mercurial.py', 'subversion.py', 'versioncontrol.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor', ['cachecontrol', 'certifi', 'chardet', 'colorama', 'distlib', 'distro', 'idna', 'msgpack', 'packaging', 'pkg_resources', 'platformdirs', 'pygments', 'pyparsing', 'pyproject_hooks', 'requests', 'resolvelib', 'rich', 'tenacity', 'tomli', 'urllib3', 'webencodings'], ['six.py', 'typing_extensions.py', 'vendor.txt', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\cachecontrol', ['caches'], ['adapter.py', 'cache.py', 'compat.py', 'controller.py', 'filewrapper.py', 'heuristics.py', 'serialize.py', 'wrapper.py', '_cmd.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\cachecontrol\\caches', [], ['file_cache.py', 'redis_cache.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\certifi', [], ['cacert.pem', 'core.py', '__init__.py', '__main__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\chardet', ['cli', 'metadata'], ['big5freq.py', 'big5prober.py', 'chardistribution.py', 'charsetgroupprober.py', 'charsetprober.py', 'codingstatemachine.py', 'codingstatemachinedict.py', 'cp949prober.py', 'enums.py', 'escprober.py', 'escsm.py', 'eucjpprober.py', 'euckrfreq.py', 'euckrprober.py', 'euctwfreq.py', 'euctwprober.py', 'gb2312freq.py', 'gb2312prober.py', 'hebrewprober.py', 'jisfreq.py', 'johabfreq.py', 'johabprober.py', 'jpcntx.py', 'langbulgarianmodel.py', 'langgreekmodel.py', 'langhebrewmodel.py', 'langhungarianmodel.py', 'langrussianmodel.py', 'langthaimodel.py', 'langturkishmodel.py', 'latin1prober.py', 'macromanprober.py', 'mbcharsetprober.py', 'mbcsgroupprober.py', 'mbcssm.py', 'resultdict.py', 'sbcharsetprober.py', 'sbcsgroupprober.py', 'sjisprober.py', 'universaldetector.py', 'utf1632prober.py', 'utf8prober.py', 'version.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\chardet\\cli', [], ['chardetect.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\chardet\\metadata', [], ['languages.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\colorama', ['tests'], ['ansi.py', 'ansitowin32.py', 'initialise.py', 'win32.py', 'winterm.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\colorama\\tests', [], ['ansitowin32_test.py', 'ansi_test.py', 'initialise_test.py', 'isatty_test.py', 'utils.py', 'winterm_test.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\distlib', [], ['compat.py', 'database.py', 'index.py', 'locators.py', 'manifest.py', 'markers.py', 'metadata.py', 'resources.py', 'scripts.py', 't32.exe', 't64-arm.exe', 't64.exe', 'util.py', 'version.py', 'w32.exe', 'w64-arm.exe', 'w64.exe', 'wheel.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\distro', [], ['distro.py', '__init__.py', '__main__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\idna', [], ['codec.py', 'compat.py', 'core.py', 'idnadata.py', 'intranges.py', 'package_data.py', 'uts46data.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\msgpack', [], ['exceptions.py', 'ext.py', 'fallback.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\packaging', [], ['markers.py', 'requirements.py', 'specifiers.py', 'tags.py', 'utils.py', 'version.py', '_manylinux.py', '_musllinux.py', '_structures.py', '__about__.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pkg_resources', [], ['__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\platformdirs', [], ['android.py', 'api.py', 'macos.py', 'unix.py', 'version.py', 'windows.py', '__init__.py', '__main__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pygments', ['filters', 'formatters', 'lexers', 'styles'], ['cmdline.py', 'console.py', 'filter.py', 'formatter.py', 'lexer.py', 'modeline.py', 'plugin.py', 'regexopt.py', 'scanner.py', 'sphinxext.py', 'style.py', 'token.py', 'unistring.py', 'util.py', '__init__.py', '__main__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pygments\\filters', [], ['__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pygments\\formatters', [], ['bbcode.py', 'groff.py', 'html.py', 'img.py', 'irc.py', 'latex.py', 'other.py', 'pangomarkup.py', 'rtf.py', 'svg.py', 'terminal.py', 'terminal256.py', '_mapping.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pygments\\lexers', [], ['python.py', '_mapping.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pygments\\styles', [], ['__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pyparsing', ['diagram'], ['actions.py', 'common.py', 'core.py', 'exceptions.py', 'helpers.py', 'results.py', 'testing.py', 'unicode.py', 'util.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pyparsing\\diagram', [], ['__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pyproject_hooks', ['_in_process'], ['_compat.py', '_impl.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\pyproject_hooks\\_in_process', [], ['_in_process.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\requests', [], ['adapters.py', 'api.py', 'auth.py', 'certs.py', 'compat.py', 'cookies.py', 'exceptions.py', 'help.py', 'hooks.py', 'models.py', 'packages.py', 'sessions.py', 'status_codes.py', 'structures.py', 'utils.py', '_internal_utils.py', '__init__.py', '__version__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\resolvelib', ['compat'], ['providers.py', 'reporters.py', 'resolvers.py', 'structs.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\resolvelib\\compat', [], ['collections_abc.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\rich', [], ['abc.py', 'align.py', 'ansi.py', 'bar.py', 'box.py', 'cells.py', 'color.py', 'color_triplet.py', 'columns.py', 'console.py', 'constrain.py', 'containers.py', 'control.py', 'default_styles.py', 'diagnose.py', 'emoji.py', 'errors.py', 'filesize.py', 'file_proxy.py', 'highlighter.py', 'json.py', 'jupyter.py', 'layout.py', 'live.py', 'live_render.py', 'logging.py', 'markup.py', 'measure.py', 'padding.py', 'pager.py', 'palette.py', 'panel.py', 'pretty.py', 'progress.py', 'progress_bar.py', 'prompt.py', 'protocol.py', 'region.py', 'repr.py', 'rule.py', 'scope.py', 'screen.py', 'segment.py', 'spinner.py', 'status.py', 'style.py', 'styled.py', 'syntax.py', 'table.py', 'terminal_theme.py', 'text.py', 'theme.py', 'themes.py', 'traceback.py', 'tree.py', '_cell_widths.py', '_emoji_codes.py', '_emoji_replace.py', '_export_format.py', '_extension.py', '_fileno.py', '_inspect.py', '_log_render.py', '_loop.py', '_null_file.py', '_palettes.py', '_pick.py', '_ratio.py', '_spinners.py', '_stack.py', '_timer.py', '_win32_console.py', '_windows.py', '_windows_renderer.py', '_wrap.py', '__init__.py', '__main__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\tenacity', [], ['after.py', 'before.py', 'before_sleep.py', 'nap.py', 'retry.py', 'stop.py', 'tornadoweb.py', 'wait.py', '_asyncio.py', '_utils.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\tomli', [], ['_parser.py', '_re.py', '_types.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\urllib3', ['contrib', 'packages', 'util'], ['connection.py', 'connectionpool.py', 'exceptions.py', 'fields.py', 'filepost.py', 'poolmanager.py', 'request.py', 'response.py', '_collections.py', '_version.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\urllib3\\contrib', ['_securetransport'], ['appengine.py', 'ntlmpool.py', 'pyopenssl.py', 'securetransport.py', 'socks.py', '_appengine_environ.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\urllib3\\contrib\\_securetransport', [], ['bindings.py', 'low_level.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\urllib3\\packages', ['backports'], ['six.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\urllib3\\packages\\backports', [], ['makefile.py', 'weakref_finalize.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\urllib3\\util', [], ['connection.py', 'proxy.py', 'queue.py', 'request.py', 'response.py', 'retry.py', 'ssltransport.py', 'ssl_.py', 'ssl_match_hostname.py', 'timeout.py', 'url.py', 'wait.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip\\_vendor\\webencodings', [], ['labels.py', 'mklabels.py', 'tests.py', 'x_user_defined.py', '__init__.py'])
('.\\.venv\\Lib\\site-packages\\pip-23.2.1.dist-info', [], ['AUTHORS.txt', 'entry_points.txt', 'INSTALLER', 'LICENSE.txt', 'METADATA', 'RECORD', 'top_level.txt', 'WHEEL'])
('.\\.venv\\Lib\\site-packages\\__pycache__', [], ['_virtualenv.cpython-312.pyc'])
('.\\.venv\\Scripts', [], ['activate', 'activate.bat', 'activate.fish', 'activate.nu', 'activate.ps1', 'activate_this.py', 'deactivate.bat', 'pip-3.12.exe', 'pip.exe', 'pip3.12.exe', 'pip3.exe', 'pydoc.bat', 'python.exe', 'pythonw.exe'])
('.\\subdir', [], [])
Process finished with exit code 0
17.3 os.path模块
Python提供的os.path模块提供对路径、目录和文件等进行管理的函数。
os.path模块的常用函数:
๏ os.path.abspath(path):返回path的绝对路径。
๏ os.path.basename(path):返回path路径的基础名部分,如果path 指向的是一个文件,则返回文件名;如果path指向的是一个目录, 则返回最后目录名。
๏ os.path.dirname(path):返回path路径中目录部分。
๏ os.path.exists(path):判断path文件是否存在。
๏ os.path.isfile(path):如果path是文件,则返回True。
๏ os.path.isdir(path):如果path是目录,则返回True。
๏ os.path.getatime(path):返回最后一次的访问时间,返回值是一个 UNIX时间戳(1970年1月1日00:00:00以来至现在的总秒数),如果文 件不存在或无法访问,则引发OSError。
๏ os.path.getmtime(path):返回最后修改时间,返回值是一个UNIX 时间戳,如果文件不存在或无法访问,则引发OSError。
๏ os.path.getctime(path):返回创建时间,返回值是一个UNIX时间戳, 如果文件不存在或无法访问,则引发OSError。
๏ os.path.getsize(path):返回文件大小,以字节为单位,如果文件不 存在或无法访问,则引发OSError。
import os.path
from datetime import datetime
f_name = 'test.txt'
af_name = r"C:\Users\21904\Documents\study_python_code\study_python\test.txt"
# 返回路径中基础名部分
basename = os.path.basename(af_name)
print(basename) # test.txt
# 返回路径中目录部分
dirname = os.path.dirname(af_name)
print(dirname)
# 返回文件的绝对路径
print(os.path.abspath(f_name))
#返回文件大小
print(os.path.getsize(f_name)) # 25
# 返回最近访问时间
atime = datetime.fromtimestamp(os.path.getatime(f_name))
print(atime)
# 返回最近访问时间
ctime = datetime.fromtimestamp(os.path.getctime(f_name))
print(ctime)
# 返回最近访问时间
mtime = datetime.fromtimestamp(os.path.getmtime(f_name))
print(mtime)
print(os.path.isfile(dirname)) # False
print(os.path.isdir(dirname)) # True
print(os.path.isfile(f_name)) # True
print(os.path.isdir(f_name)) # False
print(os.path.exists(f_name)) # True