我需要通过别的目录下的文件的完整路径打开()?(Do I need to pass the full

2019-06-26 17:58发布

我有一个在它十个文件,我想通过循环的文件夹。 当我打印出来的文件的名字我的代码工作正常:

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'
>>> 

我需要传递,甚至在循环内的文件的完整路径open()呢?

Answer 1:

是的,你需要完整的路径。

log = open(os.path.join(root, f), 'r')

是速战速决。 正如评论指出, os.walk decends进入子目录,这样你就需要使用当前的根目录,而不是indir为基础的路径加入。



Answer 2:

如果你只是寻找一个单一的目录中的文件(例如,你是不是要遍历目录树,它看起来并不像),为什么不直接使用os.listdir() :

import os  
for fn in os.listdir('.'):
     if os.path.isfile(fn):
        print (fn)

代替os.walk() 。 您可以指定一个目录路径作为参数os.listdir() 。 os.path.isfile()将确定给定文件名是文件。



Answer 3:

你必须指定您正在使用的路径:

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')


Answer 4:

中os.walk实例文档展示了如何做到这一点:

for root, dirs, filenames in os.walk(indir):
    for f in filenames:
        log = open(os.path.join(root, f),'r')

你是怎么想到了“开放”的功能,要知道,字符串“1”的解释是:“/家/ DES /测试/ 1”(除非“/家/ DES /测试”恰好是当前的工作目录)?



Answer 5:

下面是会走路的文件树为你一个片段:

indir = '/home/des/test'
for root, dirs, filenames in os.walk(indir):
    for f in filenames:
        print(f)
        log = open(indir + f, 'r')


文章来源: Do I need to pass the full path of a file in another directory to open()?