如何用Python循环文件?
我有一个文件夹中有十个文件,我想循环。 当我打印出文件名时,我的代码工作正常:
import os indir = '/home/des/test' for root, dirs, filenames in os.walk(indir): for f in filenames: print(f)
打印:
1 2 3 4 5 6 7 8 9 10
但是,如果我尝试打开循环中的文件,我得到一个IO错误:
import os indir = '/home/des/test' for root, dirs, filenames in os.walk(indir): for f in filenames: log = open(f, 'r') Traceback (most recent call last): File "/home/des/my_python_progs/loop_over_dir.py", line 6, in <module> log = open(f, 'r') IOError: [Errno 2] No such file or directory: '1' >>>
我是否需要在循环内传递文件的完整path?
是的,你需要完整的path。
log = open(os.path.join(root, f), 'r')
是快速修复。 正如注释所指出的, os.walk
会变成子目录,所以你需要使用当前的目录根目录而不是indir
作为path连接的基础。
如果你只是在一个目录下查找文件(即你不想遍历目录树,看起来不像),为什么不简单地使用os.listdir() :
import os for fn in os.listdir('.'): if os.path.isfile(fn): print (fn)
代替os.walk() 。 您可以指定一个目录path作为os.listdir()的参数。 os.path.isfile()将确定给定的文件名是否为文件。
您必须指定您正在处理的path:
source = '/home/test/py_test/' for root, dirs, filenames in os.walk(source): for f in filenames: print f fullpath = os.path.join(source, f) log = open(fullpath, 'r')
文档中的 os.walk示例演示如何执行此操作:
for root, dirs, filenames in os.walk(indir): for f in filenames: log = open(os.path.join(root, f),'r')
你如何期待“open”函数知道string“1”应该表示“/ home / des / test / 1”(除非“/ home / des / test”碰巧是你当前的工作目录)?
这里有一个代码将会为你走过文件树:
indir = '/home/des/test' for root, dirs, filenames in os.walk(indir): for f in filenames: print(f) log = open(indir + f, 'r')