楼主:
yimean (温柔杀手)
2018-05-13 18:26:13各位版上的大大好
目前我的学习进度到了zipfile这边。
书上的范例是单一个档案的压缩,我就在想那一整个资料夹的压缩要怎么做?
我就上网Google了一下别人的程式码,却发现了2个没看过,然后也不知道该怎
么查的用法。
恳请版上大大指导。下方是我查到的程式码。
def zipdir(path, ziph):
# ziph is zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file))
if __name__ == '__main__':
zipf = zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('tmp/', zipf)
zipf.close()
问题1
for root, dirs, files in os.walk(path):
常看到的For loop是单一个参数在一个条件中,但这个For loop却是有3个参数
root, dirs, files 请问这是怎么样子的用法呢?我应该要查询什么Key words?
问题2
if __name__ == '__main__':
这个我很常看到,但却不懂是什意思。
以上,烦请大德指导。
作者: stucode 2018-05-13 19:35:00
1. sequence unpacking。在这里是把 os.walk() 传回的tuple 拆开并分别指派给三个变量。2. 放在 if __name__ == '__main__': 区块里的程式码只有在 script 直接被执行时才会执行。
作者:
subi (细雨绵绵细雨)
2018-05-13 19:43:00问题一你可以执行右边程式 a,b,c = (1,2,3)是相同的意思问题二当程式是直接被执行, __name__ 就会等于 __main__如果你的程式被 a.py import, __name__就会等于你的程式名字
楼主:
yimean (温柔杀手)
2018-05-13 20:02:00感谢两位大大的解说,关于第一个我大概明白了,os.walk()会传回三个变量,就会被分别放入root, dirs, files第二个 是不是说把if...换成main(), 然后一行打main()是一样的意思~?
作者:
subi (细雨绵绵细雨)
2018-05-13 20:21:00不是喔, __name__ 是一个内建变量, 当你直接执行它它被赋予的值是 __main__假设你的程式名字叫做 abc.py,你用其他程式去import你的程式这时候 __name__ 就会是 abc
楼主:
yimean (温柔杀手)
2018-05-13 20:27:00所以如果用import的的方式, if以下的程式就不会被执行了,对吗?
作者: stucode 2018-05-13 20:33:00
楼主:
yimean (温柔杀手)
2018-05-13 20:35:00感谢解惑