Python中的文件错误

0 投票
4 回答
1993 浏览
提问于 2025-04-17 02:06

我有一个这样的脚本:

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 不会报错。

撰写回答