[问题] 程式码请益

楼主: 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
被 import 的话 if 以下不会执行没错,可以试试看:https://repl.it/@csis/pynamedemo
楼主: yimean (温柔杀手)   2018-05-13 20:35:00
感谢解惑

Links booklink

Contact Us: admin [ a t ] ucptt.com