目录

(纯新手练习九)python基础代码,我手把手带你敲(操作文件、文件夹system()popen(),zipfile()压缩文件、解压文件,sys库)

操作文件、文件夹:

执行其他应用程序:

压缩和解压文件:

sys库:


(纯新手练习九)python基础代码,我手把手带你敲(操作文件、文件夹system()popen(),zipfile()压缩文件、解压文件,sys库)

(python基础练习已完结,想学习python网络爬虫吗,先要学点html哦)

(纯新手教程)HTML零基础教学-CSDN博客

操作文件、文件夹:

代码 1

import os
print(os.getcwd())  # 获取当前代码所在的绝对路径

运行结果:假设代码文件位于D:\workspace\python目录下,则输出为D:\workspace\python
代码解析os.getcwd()返回当前 Python 脚本执行时的工作目录路径。

代码 2

import os
os.mkdir(r'E:\书代码\第9章\数据1')  # 在路径中创建一个新的文件夹

运行结果:在E:\书代码\第9章目录下创建名为数据1的文件夹。
代码解析os.mkdir()创建单层目录,若父目录不存在或目标目录已存在则报错。

代码 3

import os
os.makedirs(r'E:\书代码\数据102\内容b')  # 递归来创建文件夹

运行结果:递归创建目录E:\书代码\数据102\内容b,若父目录不存在会自动创建。
代码解析os.makedirs()递归创建多层目录,exist_ok=True参数可避免目录已存在时的错误。

代码 4

import os
for i in range(1, 201):
    file_name = '文件夹' + str(i)
    file_path = os.getcwd() + '\\数据1\\' + file_name
    os.mkdir(file_path)

运行结果:在当前目录下的数据1文件夹中创建文件夹1文件夹200共 200 个文件夹。
代码解析:循环生成目录路径并使用os.mkdir()创建,需确保父目录数据1已存在。

代码 5

'''#将参数拼接为目录路径'''
import os
dir_new = os.path.join(os.getcwd(), '数据2', '内容c')
print(dir_new, type(dir_new))

运行结果:输出拼接后的路径(如D:\workspace\python\数据2\内容c)和类型<class 'str'>
代码解析os.path.join()根据操作系统路径分隔符(Windows 为\,Linux 为/)拼接路径,避免手动处理分隔符。

代码 6

import os
print(os.getcwd())
os.chdir('E:\书代码\第9章\数据1')  # 改变当前地址的路径
print(os.getcwd())

运行结果

D:\workspace\python
E:\书代码\第9章\数据1

代码解析os.chdir()修改当前工作目录,后续文件操作(如相对路径)将基于新目录。

代码 7

import os
a = os.path.isabs('数据2\内容c')  # 判断当前路径是相对路径还是绝对路径
b = os.path.isabs('E:\书代码')
print(a, b)

运行结果False True
代码解析os.path.isabs()判断路径是否为绝对路径(Windows 以驱动器号开头,如E:\)。

代码 8

import os
path = r'E:\书代码\数据2\内容c\Python程序代码1.txt'
file_name = os.path.basename(path)  # 获取路径中的文件名
dir_name = os.path.dirname(path)  # 获取路径中的文件夹路径
file_dir_name = os.path.split(path)  # 获取的文件路径和文件名以元组的形式返回
print(file_name, '\n', dir_name, '\n', file_dir_name)

运行结果

Python程序代码1.txt
E:\书代码\数据2\内容c
('E:\\书代码\\数据2\\内容c', 'Python程序代码1.txt')

代码解析

  • os.path.basename()返回最后一级路径名(文件名或目录名)。
  • os.path.dirname()返回路径的目录部分。
  • os.path.split()将路径拆分为(目录, 文件名)元组。

代码 9

import os
path = r'E:\书代码\数据1\压缩全.zip'
print(os.path.getsize(path))  # 获取路径中的文件所占用内存的大小

运行结果:输出文件大小(字节数,如123456)。
代码解析os.path.getsize()返回文件的字节大小,若路径为目录则返回值无意义。

代码 10

import os
os.remove(r'E:\书代码\数据1\文件夹201')  # 删除path中的文件

运行结果:若文件夹201文件,则删除;若是目录,抛出PermissionError
代码解析os.remove()只能删除文件,删除目录需用os.rmdir()shutil.rmtree()

代码 11

import os
os.remove(r'E:\书代码\数据1\helloworld.txt')

运行结果:删除E:\书代码\数据1\helloworld.txt文件,若文件不存在则抛出FileNotFoundError
代码解析:同代码 10,删除指定文件。

代码 12

import os
os.rmdir(r'E:\书代码\数据1\文件夹201')  # 删除path中的最后一层文件夹

运行结果:删除文件夹201目录,要求目录为空,否则抛出OSError
代码解析os.rmdir()只能删除空目录,删除非空目录需用shutil.rmtree()

代码 13

import os
for i in range(1, 201):
    old = 'E:/书代码/第9章/数据1/文件夹' + str(i)
    new = 'E:/书代码/第9章/数据1/文件夹' + str(i + 200)
    os.rename(old, new)  # 对文件或文件夹进行重命名
os.renames('E:/书代码/第9章/数据1/文件夹201', 'E:/书代码/第9章/数据2/文件夹201')
# 对文件或文件夹递归进行重命名

运行结果

  1. 数据1目录下的文件夹1文件夹200重命名为文件夹201文件夹400
  2. 文件夹201移动到数据2目录下(需确保数据2目录存在)。
    代码解析
  • os.rename()重命名文件或目录,不能跨驱动器移动。
  • os.renames()递归创建目标路径的父目录(如数据2不存在会自动创建)。

代码 14

'''创建硬链接以实现复制文件'''
import os
os.link('E:/书代码/政府报告合集.pdf', 'E:/书代码/数据1/政府报告合集.pdf')

运行结果:在数据1目录下创建政府报告合集.pdf的硬链接,指向原文件。
代码解析os.link()创建硬链接(多个文件名指向同一物理文件),需管理员权限,且不能跨驱动器。

代码 15

import os
print('相对路径中有: ', os.listdir('.'))  # 获取路径中的全部文件名

运行结果:输出当前目录下的所有文件和文件夹名称(如['data.txt', 'folder', 'script.py'])。
代码解析os.listdir()返回指定路径下的文件和目录列表(不包含...)。

代码 16

import os
file_total_size = 0
for file_name in os.listdir('.'):
    file_dir = os.path.join(os.getcwd(), file_name)
    file_total_size += os.path.getsize(file_dir)
print(file_total_size)

运行结果:输出当前目录下所有文件的总大小(字节)。
代码解析:遍历当前目录下的所有项,累加每个文件的大小。注意:若目录包含子目录,os.path.getsize()对目录的返回值无意义,需递归处理子目录。

代码 17

import os
path = r'E:\书代码\数据2\新数据82.txt'
print(os.path.exists(path))  # 判断path所指的文件或文件夹是否存在
print(os.path.isfile(path))  # 判断path是否为一个文件
print(os.path.isdir(path))  # 判断path是否为一个文件夹

运行结果

  • 若文件存在:True True False
  • 若文件不存在:False False False
  • 若路径是目录:True False True

代码解析

  • os.path.exists()检查路径是否存在(文件或目录)。
  • os.path.isfile()os.path.isdir()进一步判断类型。

执行其他应用程序:

代码 1

import os
os.system('calc')  # 打开计算器
os.system('"D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"')  # 打开微信

运行结果

  1. 弹出 Windows 计算器窗口。
  2. 尝试启动微信,但路径中的反斜杠需转义(如D:\\Program Files...),否则会因路径错误失败。

代码解析

  • os.system()执行系统命令,等价于在 CMD 中输入命令。
  • Windows 路径中的反斜杠需用双反斜杠\\或原始字符串r""避免转义问题。

代码 2

import os
a = os.system(r"E:\书代码\第9章\第9章第3个程序.py")
print(a)

运行结果

  • 若 Python 环境已配置:执行第9章第3个程序.py,并返回退出状态码(成功通常返回0)。
  • 若 Python 未配置或路径错误:返回非零错误码(如1),并可能弹出错误提示。

代码解析

  • os.system()执行外部程序,返回值为程序退出状态码(0表示成功,非零表示失败)。
  • 直接运行.py文件依赖系统关联或环境变量配置。

代码 3

import os
os.system('"D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"')  # 打开微信
os.system('"E:\书代码\新2002年1月公司营收.xlsx"')  # 打开Excel文件

运行结果

  1. 微信启动失败(路径未正确转义)。
  2. 若 Excel 文件存在且路径正确,会调用默认程序打开该文件。

代码解析

  • Windows 中可通过路径直接打开文件(系统会关联默认程序)。
  • 路径需正确转义,建议使用r"E:\书代码\文件.xlsx"

代码 4

import os
a = os.popen(r"E:\书代码\第9章\第9章第3个程序.py", 'r')
print(a.read())  # 获取执行命令后的结果

运行结果

  • 若程序输出内容(如print()语句),则捕获并打印输出。
  • 若程序无输出或执行失败,返回空字符串或错误信息。

代码解析

  • os.popen()执行命令并返回文件对象,可通过.read()获取输出内容。
  • 此方法已过时,推荐使用subprocess模块(如subprocess.check_output())替代。

注意

  • 代码中的路径若包含空格或特殊字符,需用双引号括起来(如'"E:\书代码\程序 with space.py"')。
  • 推荐使用subprocess模块处理外部命令,提供更安全和灵活的控制。

压缩和解压文件:

代码 1

import zipfile
print(zipfile.is_zipfile('数据3\书代码.zip'))

运行结果

  • 数据3\书代码.zip是有效 Zip 文件,返回True
  • 若文件不存在、损坏或非 Zip 格式,返回False

代码解析

  • zipfile.is_zipfile()检查文件是否为 Zip 格式,通过验证文件头标识(PK\x03\x04)实现。

代码 2

import zipfile
z = zipfile.ZipFile('数据3\书代码.zip', 'r')  # 打开Zip文件(只读模式)
print(z.namelist())  # 返回压缩包内所有文件和目录的名称列表

运行结果

  • 输出类似['文件1.txt', '目录/', '目录/文件2.txt']的列表。

代码解析

  • ZipFile.namelist()返回压缩包内所有项的相对路径名,目录以斜杠/结尾。

代码 3

import zipfile
z = zipfile.ZipFile('数据3\书代码.zip')
for f in z.namelist():
    z.extract(f, r'数据3')  # 解压单个文件到指定目录

运行结果

  • 书代码.zip中的所有文件解压到数据3目录下,保留原有目录结构。

代码解析

  • ZipFile.extract()解压单个文件,若目标目录不存在会自动创建。
  • 若不指定路径(如z.extract(f)),默认解压到当前目录。

代码 4

import zipfile
z = zipfile.ZipFile('数据3\书代码新.zip', 'w')  # 创建新Zip文件(覆盖模式)
z.write(r'数据3\num1.py')  # 添加文件到压缩包
z.write(r'数据3\num2.py')
z.close()  # 关闭文件流,必须调用以完成写入

运行结果

  • 创建数据3\书代码新.zip,包含num1.pynum2.py

代码解析

  • ZipFile('路径', 'w')以写入模式打开,会覆盖已存在的文件。
  • write()参数为文件路径,默认使用源文件的相对路径(如数据3/num1.py)。

代码 5

import os, zipfile
z = zipfile.ZipFile('数据3\压缩全.zip', 'w')
for file_name in os.listdir('.\数据3'):
    if file_name != '压缩全.zip':
        z.write('./数据3/' + file_name)  # 排除自身
z.close()

运行结果

  • 数据3目录下的所有文件(除压缩全.zip外)打包到压缩全.zip

代码解析

  • 使用os.listdir()遍历目录,通过write()添加文件。
  • 需排除目标 Zip 文件本身,避免递归压缩。

代码 6

import zipfile
z = zipfile.ZipFile('数据3\书代码.zip', 'r')
for f in z.infolist():  # 获取文件详细信息
    print('文件名:', f.filename, end='\t')
    print('修改时间:', f.date_time, end='\t')
    print('CRC值:', f.CRC, end='\n\t')
    print('压缩后大小:', f.compress_size, end='\t')
    print('压缩前大小:', f.file_size)

运行结果

文件名: 文件1.txt	修改时间: (2023, 10, 1, 12, 0, 0)	CRC值: 1234567890
	压缩后大小: 1024	压缩前大小: 2048

代码解析

  • ZipFile.infolist()返回ZipInfo对象列表,包含:
    • filename:文件名
    • date_time:修改时间(年、月、日、时、分、秒元组)
    • CRC:循环冗余校验值(用于验证文件完整性)
    • compress_size/file_size:压缩前后的大小(字节)

sys库:

代码 1

import sys
print(sys.version)  # 获取当前Python解释器版本号
print(sys.version_info)  # 获取解释器的版本信息

运行结果

3.10.6 (tags/v3.10.6:9c7b4bd, Aug  1 2022, 21:53:49) [MSC v.1932 64 bit (AMD64)]
sys.version_info(major=3, minor=10, micro=6, releaselevel='final', serial=0)

代码解析

  • sys.version返回包含版本号、编译信息等的字符串,适合人类阅读。
  • sys.version_info返回一个命名元组,包含major(主版本)、minor(次版本)等结构化信息,方便程序中版本判断。

代码 2

import sys
if (sys.version_info[0]*10 + sys.version_info[1])/10 < 3.7:
    print('您的Python版本过低,请安装Python 3.7及以上版本')
    sys.exit()
else:
    print("您的Python版本正确,代码将继续运行")
print('hello world')

运行结果

  • 若 Python 版本 ≥3.7:输出您的Python版本正确,代码将继续运行hello world
  • 若版本 <3.7:输出提示信息后退出程序,不打印hello world

代码解析

  • 通过sys.version_info[0](主版本)和sys.version_info[1](次版本)计算版本号,判断是否满足运行要求。
  • sys.exit()用于终止程序,可传入状态码(如sys.exit(1)表示异常退出)。

代码 3

import sys
print(sys.maxsize)  # 获取Python支持的对象最大数据长度
print(sys.platform)  # 获取当前操作系统
print(sys.copyright)  # 获取Python版权信息
print(sys.executable)  # 获取Python解释器目录地址

运行结果

9223372036854775807
win32
Copyright (c) 2001-2022 Python Software Foundation.
All Rights Reserved.
...(省略部分版权信息)
C:\Users\username\AppData\Local\Programs\Python\Python310\python.exe

代码解析

  • sys.maxsize:Python 支持的最大整数(64 位系统通常为2^63-1),反映系统寻址能力。
  • sys.platform:返回操作系统标识(如win32表示 Windows,linux表示 Linux,darwin表示 macOS)。
  • sys.copyright:包含 Python 的版权声明和许可证信息。
  • sys.executable:返回当前运行的 Python 解释器可执行文件的绝对路径,可用于定位解释器位置。

代码 4

import sys
if (sys.version_info[0]*10 + sys.version_info[1])/10 < 3.8:
    sys.exit('您的Python版本过低,请安装Python 3.8及以上版本')
else:
    print("您的Python版本正确,代码将继续运行")
print('hello world')

运行结果

  • 若版本 ≥3.8:输出版本正确提示和hello world
  • 若版本 <3.8:程序退出并打印错误信息(作为sys.exit()的参数)。

代码解析

  • 功能与代码 2 类似,版本要求提升至 3.8。
  • sys.exit()可直接传入字符串作为退出时的提示信息,等价于print(信息); sys.exit(1)

代码 5

import sys
print(sys.argv)

运行结果

  • 在命令行运行python script.py arg1 arg2时,输出['script.py', 'arg1', 'arg2']
  • 在 IDE 中直接运行(无参数)时,输出['script.py'](仅包含脚本文件名)。

代码解析

  • sys.argv是一个列表,存储程序运行时的命令行参数。
  • 列表第一个元素sys.argv[0]为当前脚本的文件名(路径可能为相对或绝对路径),后续元素为传入的参数。

代码 6

import sys
import os
for i in range(1, len(sys.argv)):
    if sys.argv[i] == '-h':
        print('''本代码的帮助
            -h:用于查询帮助
            -a:用于获取Python的所有关键字
            -c:用于获取Python安装的所有第三方库的列表''')
    if sys.argv[i] == '-a':
        print('开始查询Python的所有关键字:')
        help("keywords")
    if sys.argv[i] == '-c':
        print('开始查询Python安装的所有第三方库: ')
        os.system('pip list')

运行结果

  • 命令行运行python script.py -h:输出帮助文档。
  • 运行python script.py -a:打印 Python 关键字(如iffordef等)。
  • 运行python script.py -c:执行pip list,显示已安装的第三方库列表。

代码解析

  • 通过遍历sys.argv解析命令行参数,实现不同功能分支(-h/-a/-c)。
  • help("keywords")调用 Python 内置帮助系统,输出所有关键字。
  • os.system('pip list')执行系统命令,调用pip工具列出已安装库。

代码 7

import sys
sys.stdout.write('hello')  # 将信息输出到控制台
a = sys.stdin.readline()  # 捕获用户输入
print(a)
sys.stderr.write('错误,请修改!')  # 输出错误信息
sys.exit()

运行结果

hello  # 此处等待用户输入,假设输入"test"并回车
test

错误,请修改!

代码解析

  • sys.stdout:标准输出流(默认对应控制台),write()方法用于输出字符串(不自动换行,与print()不同)。
  • sys.stdin:标准输入流(默认对应键盘),readline()读取用户输入的一行内容(包含换行符)。
  • sys.stderr:标准错误流,用于输出错误信息,通常与stdout显示在同一控制台,但可单独重定向(便于区分正常输出和错误)。
  • 程序最后通过sys.exit()退出。

(python基础练习已完结,想学习python网络爬虫吗,先要学点html哦)

(纯新手教程)HTML零基础教学-CSDN博客

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐