python模块百科_操作系统接口_os【一】

python模块百科_操作系统接口_os【一】

  • `os` --- 多种操作系统接口
  • 一、相关模块
    • 1.1 os.path 文件路径
    • 1.2 fileinput 文件读取
    • 1.3 tempfile 临时文件和目录
    • 1.4 shutil 高级文件和目录
    • 1.5 platform 操作系统底层模块
  • 二、关于函数适用性的说明
    • 2.1 与操作系统相同的接口
    • 2.2 支持字节串和字符串
    • 2.3 exception OSError
  • 三、文件名,命令行参数,以及环境变量
  • 四 文件系统编码格式与错误处理句柄
  • 五、locale encoding -- 语言区域编码格式
  • 六、Python UTF-8 模式

os — 多种操作系统接口

源代码: Lib/os.py


  os 模块提供了与操作系统交互的多种功能。可以使用 os 模块来执行文件或目录操作,如读取或修改环境变量、访问命令行参数、处理文件路径、执行系统命令等。

一、相关模块

1.1 os.path 文件路径

  os.path 模块提供了许多用于处理文件和目录路径的功能,包含了跨平台的、对路径名进行操作的功能。

以下是 os.path 模块中一些常用的函数:

  1. os.path.abspath(path)
    返回指定文件或目录的绝对路径。

  2. os.path.basename(path)
    返回指定文件或目录路径的最后一个组成部分,相当于 os.path.split(path)[1]

  3. os.path.commonprefix(lists)
    返回列表中所有路径名共有的最长公共前缀。

  4. os.path.dirname(path)
    返回指定文件或目录路径的目录名称,相当于 os.path.split(path)[0]

  5. os.path.exists(path)
    如果路径存在则返回 True,否则返回 False

  6. os.path.expanduser(path)
    如果路径名以 ~ 开头,则将其替换为当前用户的主目录。

  7. os.path.expandvars(path)
    扩展路径中的环境变量,如 $HOME

  8. os.path.getatime(path)
    返回文件最后访问时间的时间戳。

  9. os.path.getmtime(path)
    返回文件最后修改时间的时间戳。

  10. os.path.getsize(path)
    返回文件的大小(以字节为单位)。

  11. os.path.isabs(path)
    如果路径是绝对路径,则返回 True,否则返回 False

  12. os.path.isfile(path)
    如果路径指向一个存在的文件,则返回 True,否则返回 False

  13. os.path.isdir(path)
    如果路径指向一个存在的目录,则返回 True,否则返回 False

  14. os.path.islink(path)
    如果路径指向一个符号链接,则返回 True,否则返回 False

  15. os.path.ismount(path)
    如果路径指向一个挂载点(如 UNIX 中的挂载文件系统点),则返回 True,否则返回 False

  16. os.path.join(path1, path2, …)
    连接一个或多个路径组件。

  17. os.path.lexists(path)
    如果路径存在(无论它是文件还是目录),则返回 True,否则返回 False

  18. os.path.normcase(path)
    将路径名转换为适当的规范形式。

  19. os.path.normpath(path)
    规范化路径,例如解析 ...

  20. os.path.realpath(path)
    返回指定文件或目录的绝对路径,解析所有符号链接。

  21. os.path.relpath(path, start=None)
    返回从 startpath 的相对路径。

  22. os.path.samefile(path1, path2)
    如果 path1path2 指向同一文件或目录,则返回 True,否则返回 False

  23. os.path.sameopenfile(fp1, fp2)
    如果两个文件描述符 fp1fp2 指向同一文件,则返回 True,否则返回 False

  24. os.path.samestat(stat1, stat2)
    如果两个 stat 对象(通常是通过 os.stat() 获取的)代表同一文件,则返回 True,否则返回 False

  25. os.path.split(path)
    将路径分割为目录和文件名,并返回元组 (dir, file)

  26. os.path.splitext(path)
    分割路径为文件名和扩展名,并返回元组 (filename, extension)

1.2 fileinput 文件读取

  fileinput 允许你轻松地迭代多个输入流(通常是文件),而无需显式地打开和关闭它们。这对于从命令行读取多个文件特别有用,尤其是当你想使用相同的代码逻辑处理多个文件时。

  以下是使用 fileinput 模块的基本示例:

import fileinput# 处理单个文件
for line in fileinput.input('example.txt'):print(line, end='')# 处理多个文件   
for line in fileinput.input(['file1.txt', 'file2.txt']):print(line, end='') # 命令行输入
for line in fileinput.input():print(line, end='')

fileinput 模块还提供了以下函数:

  • fileinput.filename(): 返回当前正在读取的文件的名称。
  • fileinput.lineno(): 返回当前正在读取的行的行号。
  • fileinput.filelineno(): 返回当前正在读取的行在其文件内的行号。
  • fileinput.isfirstline(): 如果当前行是文件的第一行,则返回 True。
  • fileinput.isstdin(): 如果当前行来自标准输入(即命令行),则返回 True。

1.3 tempfile 临时文件和目录

  tempfile 模块在 Python 中用于创建临时文件和目录。它提供了一种安全、跨平台的方式来处理临时文件,这些文件在程序结束时通常会被自动删除。tempfile 模块中的这些函数和类使得处理临时文件和目录变得简单和安全,尤其是在需要处理敏感数据或避免文件泄露的情况下。

以下是 tempfile 模块中一些常用的函数:

  1. tempfile.TemporaryFile([mode=‘w+b’, buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True])
    创建一个临时文件,并返回一个文件对象。如果 delete 参数为 True(默认值),则文件会在关闭后自动删除。

  2. tempfile.NamedTemporaryFile([mode=‘w+b’, buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True])
    类似于 TemporaryFile,但返回一个文件对象,并且该文件有一个确定的文件名,可以通过文件对象的 name 属性来访问。

  3. tempfile.TemporaryDirectory([suffix=None, prefix=None, dir=None])
    创建一个临时目录,并返回一个 TemporaryDirectory 对象。当对象被销毁时,目录及其内容会被自动删除。

  4. tempfile.mkstemp([suffix, prefix, dir, text])
    生成一个唯一的临时文件名,但不创建文件。返回文件描述符和文件路径。

  5. tempfile.mkdtemp([suffix, prefix, dir])
    生成一个唯一的临时目录名,并创建该目录。返回目录路径。

  6. tempfile.gettempdir()
    返回用于创建临时文件和目录的默认目录。

  7. tempfile.gettempprefix()
    返回用于生成临时文件名和目录名的默认前缀。

  8. tempfile.tempfile.tempdir
    这是一个变量,可以设置或获取用于创建临时文件和目录的默认目录。

以下是 tempfile 模块的函数示例:

import tempfile# 创建一个临时文件
with tempfile.TemporaryFile() as tmp:tmp.write(b'Hello, world!')tmp.seek(0)print(tmp.read())# 创建一个有名字的临时文件
with tempfile.NamedTemporaryFile(delete=False) as tmp:tmp.write(b'Hello, named temp file!')tmp.seek(0)print(tmp.read())# 文件不会被自动删除,因为它是在 delete=False 下创建的# 你可以通过 tmp.name 访问其文件名# 创建一个临时目录
with tempfile.TemporaryDirectory() as tmpdir:print(f"Created temporary directory: {tmpdir}")# 在这个 with 块内,tmpdir 存在# 当 with 块结束时,tmpdir 和其内容会被自动删除# 生成一个唯一的临时文件名,但不创建文件
fd, path = tempfile.mkstemp()
print(f"Unique temporary file name: {path}")
# 需要自己关闭文件描述符
os.close(fd)# 生成一个唯一的临时目录名,并创建该目录
path = tempfile.mkdtemp()
print(f"Unique temporary directory: {path}")
# 需要自己手动删除目录
os.rmdir(path)

1.4 shutil 高级文件和目录

  shutil 提供了高级的文件、文件夹和文件流操作,使得文件和文件夹的操作更加便捷。当需要执行比简单的文件读写更复杂的操作时,通常会使用 shutilshutil 是 “shell utilities” 的缩写,意味着它提供了一些类似于 Unix shell 命令的功能。

以下是一些 shutil 模块中常用的函数:

  1. shutil.copy(src, dst)
    复制文件从 srcdst

  2. shutil.copy2(src, dst)
    复制文件,并尝试保留文件的元数据(如修改时间、访问权限等)。

  3. shutil.copytree(src, dst, symlinks=False, ignore=None)
    递归地复制整个文件夹及其内容。

  4. shutil.rmtree(path, ignore_errors=False, οnerrοr=None)
    递归地删除整个文件夹及其内容。

  5. shutil.move(src, dst)
    将文件或文件夹从 src 移动到 dst

  6. shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None)
    创建一个归档文件(如 ZIP、TAR 等)。

  7. shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
    查找可执行文件的路径。

  8. shutil.register_archive_format(name, function, extra_args=None, description=None)
    注册一个新的归档格式。

  9. shutil.unregister_archive_format(name)
    取消注册一个归档格式。

以下是 shutil 模块的函数示例:

import shutil# 复制文件
shutil.copy('source.txt', 'destination.txt')# 复制文件夹
shutil.copytree('source_folder', 'destination_folder')# 删除文件夹
shutil.rmtree('folder_to_remove')# 移动文件
shutil.move('old_name.txt', 'new_name.txt')# 创建 ZIP 归档
shutil.make_archive('my_archive', 'zip', 'path_to_folder_to_archive')# 查找特定命令的路径
path_to_python = shutil.which('python')
print(f"Path to python: {path_to_python}")

1.5 platform 操作系统底层模块

  platform 提供了许多与底层平台相关的信息,如操作系统的名称、版本、架构等。使用 platform 模块可以编写更可移植的代码,因为可以根据运行代码的操作系统来做出不同的行为或决策。

  这个模块允许在不知道代码将在哪种操作系统上运行时,仍然能够收集有关底层系统的有用信息。在编写需要适应不同环境的软件时,这是非常有帮助的。

以下是 platform 模块中常用的属性:

  1. platform.system()
    返回操作系统名称,例如 ‘Windows’, ‘Linux’, ‘Darwin’(对于 MacOS)。

  2. platform.node()
    返回机器的主机名。

  3. platform.release()
    返回操作系统的发行版本号。

  4. platform.version()
    返回操作系统的版本信息。

  5. platform.machine()
    返回机器的硬件名称,例如 ‘x86’, ‘AMD64’, ‘ARM’。

  6. platform.processor()
    返回机器的处理器名称,例如 ‘Intel64 Family 6 Model 158 Stepping 9, GenuineIntel’。

  7. platform.python_version()
    返回 Python 解释器的版本。

  8. platform.python_compiler()
    返回用于编译 Python 解释器的编译器。

  9. platform.python_branch()
    返回 Python 解释器的分支名称。

  10. platform.python_revision()
    返回 Python 解释器的修订版本号。

  11. platform.python_build()
    返回 Python 解释器的构建时间戳和构建标识符。

  12. platform.python_implementation()
    返回 Python 解释器的实现名称,例如 ‘CPython’, ‘Jython’, ‘IronPython’。

以下是 platform 模块中常用的函数:

  1. platform.uname()
    返回一个包含五个属性的元组,与 POSIX uname 命令返回的类似,包括系统名称、节点名称、发布版本、版本和机器名称。

  2. platform.architecture()
    返回一个元组,包含位大小和链接的库名称。

  3. platform.libc_ver()
    返回 C 库版本信息,通常是一个包含两个元素的元组。

以下是 platform 模块的函数示例:

import platform# 输出操作系统信息
print("Operating System:", platform.system())
print("Release Version:", platform.release())
print("Machine Hardware:", platform.machine())
print("Processor:", platform.processor())# 输出Python解释器信息
print("Python Version:", platform.python_version())
print("Python Compiler:", platform.python_compiler())
print("Python Branch:", platform.python_branch())
print("Python Revision:", platform.python_revision())# 获取更多信息
print("OS name and version:", platform.platform())
print("OS uname info:", platform.uname())
print("Architecture info:", platform.architecture())
print("C library version:", platform.libc_ver())

二、关于函数适用性的说明

2.1 与操作系统相同的接口

  Python中所有依赖于操作系统的内置模块的设计都是一样,只要不同的操作系统某一相同的功能可用,它就使用相同的接口。

  例如,函数 os.stat(path) 以相同的格式返回关于 path 的状态信息(该格式源于 POSIX 接口)。

  特定于某一操作系统的扩展通过操作 os 模块也是可用的,但是使用它们是对可移植性的一种威胁。

2.2 支持字节串和字符串

  所有接受路径或文件名的函数都同时支持字节串和字符串对象,并在返回路径或文件名时使用相应类型的对象作为结果。

2.3 exception OSError

  如果使用无效或无法访问的文件名与路径,或者其他类型正确但操作系统不接受的参数,os模块的所有函数都抛出 OSError (或者它的子类)。OSError的别名是os.error

三、文件名,命令行参数,以及环境变量

  在 Python 中,使用字符串类型表示文件名、命令行参数和环境变量。 在某些系统上,在将这些字符串传递给操作系统之前,必须将这些字符串解码为字节。

  Python 使用 filesystem encoding and error handler 来执行此转换,可以通过 sys.getfilesystemencoding() 获取在文件系统中编码文件名的字符串。这通常与操作系统的默认文件系统编码有关。

  例如,在 Unix 和 Linux 系统中,默认的文件系统编码通常是 ‘UTF-8’。而在 Windows 中,这取决于系统配置和版本,但通常是 ‘cp1252’。

  这里是一个简单的例子来演示如何使用这个函数:

import sysfilesystem_encoding = sys.getfilesystemencoding()
print("Filesystem encoding:", filesystem_encoding)

注意:文件系统编码可能不同于 Python 解释器用来解释源代码的编码,后者可以通过在源代码文件的开头添加特殊的注释来指定(例如 # coding: utf-8

  filesystem encoding and error handler 是在 Python 启动时通过 PyConfig_Read() 函数来配置的:请参阅 PyConfigfilesystem_encodingfilesystem_errors 等成员。

  文件系统编码器 必须保证能成功解码所有 128 以内的字节。如果不能保证,API 函数可能触发 UnicodeError

四 文件系统编码格式与错误处理句柄

  filesystem encoding and error handler 是Python 用来从操作系统解码字节串和向操作系统编码 Unicode 的编码格式与错误处理句柄。

  文件系统编码格式必须保证能成功解码长度在 128 以下的所有字节串。 如果文件系统编码格式无法提供此保证,则 API 函数可能会引发 UnicodeError

  sys.getfilesystemencoding()sys.getfilesystemencodeerrors() 函数可被用来获取文件系统编码格式与错误处理句柄。

  filesystem encoding and error handler是在 Python 启动时通过 PyConfig_Read()函数来配置的:请查阅 PyConfigfilesystem_encodingfilesystem_errors

五、locale encoding – 语言区域编码格式

  在 Unix 上,它是 LC_CTYPE 语言区域的编码格式。 它可以通过 locale.setlocale(locale.LC_CTYPE, new_locale) 来设置。

  在 Windows 上,它是 ANSI 代码页 (如: "cp1252")。

  在 Android 和 VxWorks 上,Python 使用 "utf-8" 作为语言区域编码格式。

  locale.getencoding() 可被用来获取语言区域编码格式。

六、Python UTF-8 模式

  Python UTF-8 模式是一个特殊的模式,此模式会忽略 locale encoding 并强制使用 UTF-8 编码。如果在 Python 启动时 LC_CTYPE 区域设为 CPOSIX ,则启用 Python UTF-8 模式 (参见 PyConfig_Read() 函数)。它可以通过命令行选项 -X utf8 和环境变量 PYTHONUTF8,来启用或禁用。

  如果没有设置 PYTHONUTF8 环境变量,那么解释器默认使用当前的地区设置,除非 当前地区识别为基于 ASCII 的传统地区(如 PYTHONCOERCECLOCALE 所述),并且 locale coercion 被禁用或失败。在这种传统地区,除非显式指明不要如此,解释器将默认启用 UTF-8 模式。Python UTF-8 模式只能在 Python 启动时启用。其值可以从 sys.flags.utf8_mode 读取。

  当处在Python UTF-8 模式下时,会出现以下特征:

  1. 用 UTF-8 作为 文件系统编码。
  2. sys.getfilesystemencoding() 返回 'utf-8'
  3. locale.getpreferredencoding() 返回 'utf-8' (do_setlocale 参数不起作用)。
  4. sys.stdin, sys.stdoutsys.stderr 都将 UTF-8 用作它们的文本编码,并且为 sys.stdinsys.stdout 启用 surrogateescape 错误处理句柄 (sys.stderr 会继续使用 backslashreplace 如同在默认的局部感知模式下一样)
  5. 在 Unix 上,os.device_encoding() 返回 'utf-8' 而不是设备的编码格式。

注意 UTF-8 模式下的标准流设置可以被 PYTHONIOENCODING 所覆盖(在默认的区域感知模式下也同样如此)。

  当低层级 API切换到UTF-8编码后,其他高层级 API 也相应改变:

  • 命令行参数,环境变量和文件名会使用 UTF-8 编码来解码为文本。
  • os.fsdecode()os.fsencode() 会使用 UTF-8 编码。
  • open(), io.open()codecs.open() 默认会使用 UTF-8 编码。 但是,它们默认仍将使用严格错误处理句柄,因此试图在文本模式下打开二进制文件将可能引发异常,而不是生成无意义的数据。

(未完待续……)

may the odds be ever in your favor ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git版本管理常用指令

Git常用命令 一、基本指令二、本地仓库管理三、远程仓库管理四、分支管理五、储藏区六、标签管理一、基本指令 查看Git安装版本:git --version 查看log指令的帮助信息:git log --help 配置Git用户名:git config --global user.name “xxxxx” 配置Git邮箱: git config --…

2024年腾讯云新用户优惠券领取入口及使用教程

随着云计算技术的不断发展和普及,越来越多的个人和企业选择使用云服务。腾讯云作为国内领先的云服务提供商,为了吸引新用户,经常推出各种优惠活动,其中就包括新用户专属优惠券,本文将为大家分享腾讯云新用户优惠券的领…

5个好玩神奇还免费的工具网站收藏不后悔-搜嗖工具箱

生命倒计时 http://www.thismuchlonger.com 这是一个相哇塞的网站,可以让我们静下心来好好想想我们来这个世界究竟为了什么,因为当我们作为命运的主宰者。敲打键盘设定好自己一生长度的时候,我们的剩余寿命已经成绝对值,一旦生命…

创建型模式之原型模式

一、概述 1、工作原理:将一个原型对象传给要发动创建的对象(即客户端对象),这个要发动创建的对象通过请求原型对象复制自己来实现创建过程 2、通过克隆方法所创建的对象是全新的对象,它们在内存中拥有新的地址,每一个克隆对象都是独立的 3…

MySQL 中的 varchar 和 char 有什么区别?MySQL中 in 和 exists 区别?

MySQL 中的 varchar 和 char 有什么区别? char 是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容.该字段都占用 10 个字符,而 varchar 是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度1,最后一个字符存储使用了多长的空间. 在检索…

李沐动手学习深度学习——3.6练习

本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题?提示:尝试计算exp(50)的大小。 可能存在超过计算机最大64位的存储,导致精度溢出,影响最终计算结果。 本节中的函数cross_entropy是根据交叉熵损失函数…

JavaScript之数据类型

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 数据类型   Java…

20.图

图的基本概念 1.图的定义 由顶点和边组成的集合,G(V,E) 2.基本概念 邻接点: 对于无向图u v来说,uv互为邻接点 对于有向图u->v来说,v是u的邻接点,但u不是v的临界点 路径: 一个顶点到另一个顶点所经过的…

从Poincare猜想看中国数学的国际地位

2006年丘成桐学派利用北京晨兴数学中心,宣布一名俄国学者Poincare猜想研究中存在错误,已经由华裔学者朱熹平和曹怀东纠正过来,但数年以后我发现作为千禧七问题之一的Poincazre猜想,英国克莱数学所还是把1百万美元奖金送给俄国人。…

蓝桥杯:卡片

题目 小蓝有很多数字卡片,每张卡片上都是数字0 到9。 小蓝准备用这些卡片来拼一些数,他想从1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从1 拼到多少。 例如,当小…

动态规划-最长公共子串(c)

动态规划 动态规划(dynamic programming)是一种算法设计方法。基本思想是在对一个问题的多阶段决策中,按照某一顺序,根据每一步所选决策的不同,会引起状态的转移,最后会在变化的状态中获取到一个决策序列。…

vs code更新后json文件无法识别通配符 ,编译多文件失败的解决办法

问题描述 在Mac或者LInux上,进行C/C相同路径下进行多文件编译时,之前设置好的json文件突然不能解释通配符,并且将带有单引号的地址传给clang,由于*.c被扩在单引号中,clang找不到文件导致失败。 如果将命令端中的指令复…

云服务器无法Ping通解决

问题: 使用公网IP地址PING云服务器,无法PING通 但是可SSH到服务器,表示通信链路是正常的,可能是端口或路径规则未开放导致 登陆云服务器后台,进行安全组规则查看,发现ICMP没有放行 添加允许ICMP连接规则 成功PING通云服务器

LeetCode——二叉树(Java)

二叉树 简介[简单] 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历二叉树层序遍历[中等] 102. 二叉树的层序遍历[中等] 107. 二叉树的层序遍历 II[中等] 199. 二叉树的右视图[简单] 637. 二叉树的层平均值[中等] 429. N 叉树的层序遍历[中等] 515. 在每个…

Java接口

接口的定义 抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 接口并不是类,编写接口的方式和类很相似,但是他们属于不同的概念。类描述的是对象的属性和方法。接口则包含类要实…

AcWing 4726. 寻找数字

解题思路 在这个二插搜索树中寻找&#xff0c;4和7数量相等&#xff0c;并且大于n的最小数。 相关代码 import java.util.*;public class Main {static String s;static List<Integer> res new ArrayList<>();static long n;static long ansLong.MAX_VALUE;publ…

递归实现指数型枚举(c++题解)

题目描述 从 1~n 这 n(n<16) 个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 输入格式 一个整数n。 输出格式 每行一种方案。同一行内的数必须升序排列&#xff0c;相邻两个数用恰好1个空格隔开。对于没有选任何数的方案&#xff0c;输出空行。 样例 …

python 爬虫 app爬取之charles的使用

专栏系列:http://t.csdnimg.cn/WfCSx 前言 前面介绍的都是爬取 Web 网页的内容。随着移动互联网的发展,越来越多的企业并没有提供 Web 网页端的服务,而是直接开发了 App,更多更全的信息都是通过 App 来展示的。那么针对 App 我们可以爬取吗?当然可以。 App 的爬取相比 …

使用HTML5画布(Canvas)模拟图层(Layers)效果

使用HTML5画布&#xff08;Canvas&#xff09;模拟图层&#xff08;Layers&#xff09;效果 在图形处理和计算机图形学中&#xff0c;图层&#xff08;Layers&#xff09;是指将图像分成不同的可独立编辑、组合和控制的部分的技术或概念。每个图层都可以包含不同的图形元素、效…

18.题目:编号760 数的计算

题目&#xff1a; ###该题主要考察递推、递归 将该题看成若干个子问题 #include<bits/stdc.h> using namespace std; const int N20; int a[N];int dfs(int dep){int res1;for(int i1;i<a[dep-1]/2;i){a[dep]i;resdfs(dep1);}return res; }int main(){int n;cin>…