2012-09-06 2 views
6

안녕하세요 저는 python을 사용하고 sftp에 연결하려고하고 거기에서 xml 파일을 가져오고 아래 로컬 시스템에 배치해야합니다. 코드를입니다파이썬에서 sftp를 통해 연결 한 후 디렉토리에있는 모든 폴더와 파일을 나열하는 방법

import paramiko 

sftpURL = 'sftp.somewebsite.com' 
sftpUser = 'user_name' 
sftpPass = 'password' 

ssh = paramiko.SSHClient() 
# automatically add keys without requiring human intervention 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

ssh.connect(sftpURL, username=sftpUser, password=sftpPass) 

ftp = ssh.open_sftp() 
files = ftp.listdir() 
print files 

여기에 연결이 성공을 가득 지금은 모든 폴더와 모든 파일을보고 거기에서 XML 파일을 검색하기위한 필요한 폴더에 입력해야 할.

마지막으로 내 의도는 sftp 서버에 연결 한 후 모든 폴더와 파일을 보는 것입니다. 위의 코드에서 이 ftp.listdir()을 사용했다 내가 통해 나는이 유일한 파일이 존재하는지 여부를 알고 싶어

['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml'] 

아래 같은 몇 가지로 출력있어?

위의 명령을 사용하면 폴더를 볼 때도 적합합니까? 모든 폴더와 파일

답변

8

한 빠른 해결책이 ftp.listdir()에서 각 개체의 lstat의 출력을 검사하는 것입니다 볼 수있는 명령은 무엇

.

다음은 모든 디렉토리를 나열하는 방법입니다.

>>> for i in ftp.listdir(): 
...  lstatout=str(ftp.lstat(i)).split()[0] 
...  if 'd' not in lstatout: print i, 'is a file' 
... 
+6

'SFTPAttributes'이 끔찍한, 끔찍한 해킹의 문자열 화 (stringification) 동작에 의존 :

>>> for i in ftp.listdir(): ... lstatout=str(ftp.lstat(i)).split()[0] ... if 'd' in lstatout: print i, 'is a directory' ... 

파일은 반대 검색합니다. 왜 제대로하지 않고'stat.S_ISDIR (lstatout.st_mode)'를 사용합니까? –

+0

@FakeName이 작업을 수행하려고하는데 귀하의 의견을 이해할 수 없습니다. –

+0

@PANDAStack -'ftp.lstat (i)'는 클래스'[SFTPAttributes'] (https://github.com/paramiko/paramiko/blob/6978c7a0b8faa683b119de3a0c096be31ac4fdc9/paramiko/sftp_attr.py#L25)의 인스턴스를 반환합니다. 이 대답이하는 방식은 라이브러리가 SFTPAttributes' * look *의'__repr__'을 어떻게 선택했는지에 의존하는 것입니다.이 인터페이스는 프로그래머가 디버깅 할 수 있도록 설계된 인터페이스로, 테스트되거나 보장되지 않습니다. 패치 버전 번호 전체 에서조차도 일정합니다. –

관련 문제