Python可以用Popen一起走循环吗?
Can you use Popen and walk together in a loop in Python?
我正在尝试使用可执行文件压缩器 (7-Zip) 压缩目录及其子目录中的文件。我已经设置了一个循环来自动执行该过程,并且代码不会产生任何错误。但是,它似乎没有压缩任何东西。我写的是:
import subprocess, os
path = 'directory-path'
newpath = 'new-directory-path'
for dirpath, dirnames, files in os.walk(path):
for filename in files:
p = subprocess.Popen(['C:\Program Files (x86)\7-Zip\7z.exe', 'a', '-mx1', 'blahblah', filename], cwd = newpath)
p.wait()
确实在newpath
目录下输出了一个文件blahblah.dat
,但是1KB的文件,应该是几GB。当然,当我在循环外的文件路径中进行硬编码时,它工作得很好。我在这里做错了什么?
当您将文件传递给 7z.exe
时,您没有提供文件的目录名称,因此它会在当前目录中查找文件。使用 os.path.join()
将目录与文件名合并。
p = subprocess.call(['C:\Program Files (x86)\7-Zip\7z.exe', 'a', '-mx1', 'blahblah', os.path.join(dirpath, filename)], cwd = newpath)
我正在尝试使用可执行文件压缩器 (7-Zip) 压缩目录及其子目录中的文件。我已经设置了一个循环来自动执行该过程,并且代码不会产生任何错误。但是,它似乎没有压缩任何东西。我写的是:
import subprocess, os
path = 'directory-path'
newpath = 'new-directory-path'
for dirpath, dirnames, files in os.walk(path):
for filename in files:
p = subprocess.Popen(['C:\Program Files (x86)\7-Zip\7z.exe', 'a', '-mx1', 'blahblah', filename], cwd = newpath)
p.wait()
确实在newpath
目录下输出了一个文件blahblah.dat
,但是1KB的文件,应该是几GB。当然,当我在循环外的文件路径中进行硬编码时,它工作得很好。我在这里做错了什么?
当您将文件传递给 7z.exe
时,您没有提供文件的目录名称,因此它会在当前目录中查找文件。使用 os.path.join()
将目录与文件名合并。
p = subprocess.call(['C:\Program Files (x86)\7-Zip\7z.exe', 'a', '-mx1', 'blahblah', os.path.join(dirpath, filename)], cwd = newpath)