5.12 测试文件是å�¦å˜åœ¨Â¶
问题¶
ä½ æƒ³æµ‹è¯•ä¸€ä¸ªæ–‡ä»¶æˆ–ç›®å½•æ˜¯å�¦å˜åœ¨ã€‚
解决方案¶
使用 os.path 模å�—æ�¥æµ‹è¯•一个文件或目录是å�¦å˜åœ¨ã€‚比如:
>>> import os
>>> os.path.exists('/etc/passwd')
True
>>> os.path.exists('/tmp/spam')
False
>>>
ä½ è¿˜èƒ½è¿›ä¸€æ¥æµ‹è¯•这个文件时什么类型的。 在下é�¢è¿™äº›æµ‹è¯•ä¸ï¼Œå¦‚果测试的文件ä¸�å˜åœ¨çš„æ—¶å€™ï¼Œç»“果都会返回False:
>>> # Is a regular file
>>> os.path.isfile('/etc/passwd')
True
>>> # Is a directory
>>> os.path.isdir('/etc/passwd')
False
>>> # Is a symbolic link
>>> os.path.islink('/usr/local/bin/python3')
True
>>> # Get the file linked to
>>> os.path.realpath('/usr/local/bin/python3')
'/usr/local/bin/python3.3'
>>>
å¦‚æžœä½ è¿˜æƒ³èŽ·å�–元数æ�®(比如文件大å°�或者是修改日期),也å�¯ä»¥ä½¿ç”¨ os.path 模å�—æ�¥è§£å†³ï¼š
>>> os.path.getsize('/etc/passwd')
3669
>>> os.path.getmtime('/etc/passwd')
1272478234.0
>>> import time
>>> time.ctime(os.path.getmtime('/etc/passwd'))
'Wed Apr 28 13:10:34 2010'
>>>
讨论¶
使用 os.path �进行文件测试是很简�的。
在写这些脚本时,å�¯èƒ½å”¯ä¸€éœ€è¦�注æ„�çš„å°±æ˜¯ä½ éœ€è¦�考虑文件æ�ƒé™�的问题,特别是在获å�–元数æ�®æ—¶å€™ã€‚比如:
>>> os.path.getsize('/Users/guido/Desktop/foo.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.3/genericpath.py", line 49, in getsize
return os.stat(filename).st_size
PermissionError: [Errno 13] Permission denied: '/Users/guido/Desktop/foo.txt'
>>>