반응형
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')
반응형
'IT박스' 카테고리의 다른 글
입력 필드가있는 메시지 상자 (0) | 2020.11.27 |
---|---|
AngularJS : $ resource 요청으로 인증 토큰을 보내는 방법은 무엇입니까? (0) | 2020.11.27 |
New-WebServiceProxy를 통해 웹 서비스에 추가 HTTP 헤더를 보낼 수 있습니까? (0) | 2020.11.27 |
jquery 확장 대 각도 확장 (0) | 2020.11.27 |
HTTPS 백엔드 서버와 통신하도록 Apache 서버를 구성하는 방법은 무엇입니까? (0) | 2020.11.27 |