作者yimean (温柔杀手)
看板Python
标题[问题] 程式码请益
时间Sun May 13 18:26:13 2018
各位版上的大大好
目前我的学习进度到了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__':
这个我很常看到,但却不懂是什意思。
以上,烦请大德指导。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.98.141
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1526207176.A.577.html
※ 编辑: yimean (123.195.98.141), 05/13/2018 18:26:50
1F:→ stucode: 1. sequence unpacking。在这里是把 os.walk() 传回的 05/13 19:35
2F:→ stucode: tuple 拆开并分别指派给三个变数。 05/13 19:35
3F:→ stucode: 2. 放在 if __name__ == '__main__': 区块里的程式码只有 05/13 19:35
4F:→ stucode: 在 script 直接被执行时才会执行。 05/13 19:35
5F:→ subi: 问题一你可以执行右边程式 a,b,c = (1,2,3) 05/13 19:43
6F:→ subi: 是相同的意思 05/13 19:43
7F:→ subi: 问题二当程式是直接被执行, __name__ 就会等於 __main__ 05/13 19:44
8F:→ subi: 如果你的程式被 a.py import, __name__就会等於你的程式名字 05/13 19:47
9F:→ yimean: 感谢两位大大的解说,关於第一个我大概明白了,os.walk() 05/13 20:02
10F:→ yimean: 会传回三个变数,就会被分别放入root, dirs, files 05/13 20:03
11F:→ yimean: 第二个 是不是说把if...换成main(), 然後一行打main()是一 05/13 20:05
12F:→ yimean: 样的意思~? 05/13 20:05
13F:→ subi: 不是喔, __name__ 是一个内建变数, 当你直接执行它 05/13 20:21
14F:→ subi: 它被赋予的值是 __main__ 05/13 20:21
15F:→ subi: 假设你的程式名字叫做 abc.py,你用其他程式去import你的程式 05/13 20:22
16F:→ subi: 这时候 __name__ 就会是 abc 05/13 20:23
17F:→ yimean: 所以如果用import的的方式, if以下的程式就不会被执行了, 05/13 20:27
18F:→ yimean: 对吗? 05/13 20:27
19F:→ stucode: 被 import 的话 if 以下不会执行没错,可以试试看: 05/13 20:33
21F:→ yimean: 感谢解惑 05/13 20:35