(纯新手练习九)python基础代码,我手把手带你敲(操作文件、文件夹system()popen(),zipfile()压缩文件、解压文件,sys库)
创建硬链接(多个文件名指向同一物理文件),需管理员权限,且不能跨驱动器。:遍历当前目录下的所有项,累加每个文件的大小。注意:若目录包含子目录,修改当前工作目录,后续文件操作(如相对路径)将基于新目录。创建单层目录,若父目录不存在或目标目录已存在则报错。返回文件的字节大小,若路径为目录则返回值无意义。:输出当前目录下所有文件的总大小(字节)。对目录的返回值无意义,需递归处理子目录。返回指定路径下的文
目录
(纯新手练习九)python基础代码,我手把手带你敲(操作文件、文件夹system()popen(),zipfile()压缩文件、解压文件,sys库)
(纯新手练习九)python基础代码,我手把手带你敲(操作文件、文件夹system()popen(),zipfile()压缩文件、解压文件,sys库)
(python基础练习已完结,想学习python网络爬虫吗,先要学点html哦)
操作文件、文件夹:
代码 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
到文件夹200
重命名为文件夹201
到文件夹400
。 - 将
文件夹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"') # 打开微信
运行结果:
- 弹出 Windows 计算器窗口。
- 尝试启动微信,但路径中的反斜杠需转义(如
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文件
运行结果:
- 微信启动失败(路径未正确转义)。
- 若 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.py
和num2.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 关键字(如if
、for
、def
等)。 - 运行
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哦)

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