Python中的文件错误
我有一个这样的脚本:
import os
import stat
curDir = os.getcwd()+'/test'
for (paths, dirs, files) in os.walk(curDir):
for f in files:
if os.stat(f)[stat.ST_SIZE]>0:
print f
还有一个文件夹 test/:
test_folder:
--test.wav
a.exe
t1
t2
rain.wav
当我用 geany 运行这个脚本时,它给我报了以下错误:
Traceback (most recent call last): File "new_folder_deleter.py", line 8, in <module> if os.stat(f)[stat.ST_SIZE]>0: OSError: [Errno2] No such file or directory: 'a.exe'
但是当我用 IDLE 运行时,它只是把 test.wav 打印在了子文件夹 test_folder 里。
有没有人能解释一下为什么会这样,以及我该如何解决这个问题?
附注:我的目标是浏览所有文件,并删除指定大小的文件。
4 个回答
0
从os.walk()
得到的files
组件返回的文件列表只是文件名,没有路径。在你对这些文件进行任何操作之前(包括使用stat()
),你需要把文件的完整路径拼接起来。
0
os.walk
这个函数会返回当前文件夹下的文件和目录名称,所以你需要用os.stat(os.path.join(paths, f))
来获取这些文件或目录的详细信息。
1
你需要为 os.stat
指定一个完整的路径,除非这个文件就在当前的工作目录里。解决这个问题最简单的方法就是在尝试访问文件之前,先改变工作目录:
curDir = os.getcwd()+'/test'
os.chdir(curDir)
还有一种更通用的解决办法,就是直接把完整的路径传给 os.stat
:
if os.stat(os.path.join(paths, f))[stat.ST_SIZE]>0:
print f
不过我不太明白为什么在这里 IDLE 不会报错。