Python如何一次性输入多文件路径并添加至列表以完成多文件压缩
嘿,刚接触Python就能动手写文件压缩工具,挺厉害的!针对你想一次性输入所有文件路径的需求,这里有几个简单好用的方法,你可以根据自己的场景选:
方法1:让用户用分隔符一次性输入路径
你可以引导用户用**空格(或者逗号)**分隔多个文件路径,然后用Python的split()方法把输入的字符串拆成列表。如果你的文件路径里包含空格(比如Windows里的C:\My Documents\file.txt),那用逗号分隔会更稳妥。
示例代码:
import zipfile import os # 让用户输入路径,用逗号分隔(适合路径含空格的场景) input_str = input("请输入需要压缩的文件路径,用逗号分隔:") file_list = [path.strip() for path in input_str.split(',')] # 去除每个路径前后的空格 # 先验证路径是否存在,避免出错 valid_files = [] for path in file_list: if os.path.exists(path): valid_files.append(path) else: print(f"⚠️ 警告:路径 {path} 不存在,已跳过") # 开始压缩 with zipfile.ZipFile("backup.zip", "w", zipfile.ZIP_DEFLATED) as zipf: for file in valid_files: # 第二个参数是压缩后文件的名称,用os.path.basename只保留文件名,不存完整路径 zipf.write(file, os.path.basename(file)) print("✅ 压缩完成啦!")
方法2:通过命令行参数传递路径
如果想让工具更“专业”一点,可以用sys模块读取命令行参数。用户运行脚本时直接在后面跟上所有文件路径就行,比如:python zip_tool.py C:\Users\AAA\BBB C:\Users\AAA\CCC
示例代码:
import zipfile import os import sys # sys.argv[0]是脚本本身的路径,后面的元素就是用户传入的文件路径 file_list = sys.argv[1:] if not file_list: print("❌ 请在命令行后添加需要压缩的文件路径,比如:python zip_tool.py 路径1 路径2") sys.exit() # 验证路径有效性 valid_files = [p for p in file_list if os.path.exists(p)] invalid_files = [p for p in file_list if not os.path.exists(p)] if invalid_files: print(f"⚠️ 以下路径不存在,已跳过:{', '.join(invalid_files)}") # 压缩文件 with zipfile.ZipFile("backup.zip", "w", zipfile.ZIP_DEFLATED) as zipf: for file in valid_files: zipf.write(file, os.path.basename(file)) print("✅ 压缩完成!")
方法3:用图形界面选文件(最直观)
如果不想让用户手动敲路径,用Python自带的tkinter做一个简单的文件选择对话框,用户可以一次性选多个文件,完全不用记路径,对新手特别友好。
示例代码:
import zipfile import os import tkinter as tk from tkinter import filedialog # 初始化tkinter,隐藏主窗口 root = tk.Tk() root.withdraw() # 弹出文件选择框,允许选多个文件 file_list = filedialog.askopenfilenames(title="请选择需要压缩的文件") if not file_list: print("❌ 没有选择任何文件,程序退出") exit() # 开始压缩 with zipfile.ZipFile("backup.zip", "w", zipfile.ZIP_DEFLATED) as zipf: for file in file_list: zipf.write(file, os.path.basename(file)) print("✅ 压缩完成!")
小提醒
如果用户输入的Windows路径里有反斜杠,不用特意转义——input()读取的原始输入会自动处理成普通字符串,直接用就行。要是路径里有空格,用方法1的逗号分隔或者方法3的图形界面是最稳妥的。
内容的提问来源于stack exchange,提问作者Imola




