IT박스

open ()을 위해 다른 디렉토리에있는 파일의 전체 경로를 전달해야합니까?

itboxs 2020. 11. 27. 07:56
반응형

open ()을 위해 다른 디렉토리에있는 파일의 전체 경로를 전달해야합니까?


반복하고 싶은 10 개의 파일이있는 폴더가 있습니다. 파일 이름을 인쇄하면 코드가 제대로 작동합니다.

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()해야합니까?


예, 전체 경로가 필요합니다.

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

빠른 수정입니다. 주석이 지적했듯이 os.walk하위 디렉토리로 이동하므로 indir경로 결합의 기본이 아닌 현재 디렉토리 루트를 사용해야합니다 .


당신은 단지 하나의 디렉토리에있는 파일을 찾는 경우에 (당신이 즉, 하지 , 왜 단순히 사용하지 그것처럼 보이지 않는 디렉토리 트리, 통과하려고) ) (os.listdir를 :

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

os.walk () 대신 . os.listdir () 의 매개 변수로 디렉토리 경로를 지정할 수 있습니다 . os.path.isfile () 은 주어진 파일 이름이 파일에 대한 것인지 결정합니다.


작업중인 경로를 지정해야합니다.

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

"열기"함수가 문자열 "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')

참고 URL : https://stackoverflow.com/questions/11801309/do-i-need-to-pass-the-full-path-of-a-file-in-another-directory-to-open

반응형