2016-04-07 22 views
0

Python ile tam bir noob olarak özür dilerim.Dosyaları eşleme ile sftp.listdir

Aşağıdakileri yapması gereken bir program yazıyorum Im: Sftp içine bağlanır ve sftp dizinindeki dosyaların bir eşleşmesini bir argümana aktardığım dosyaların bir listesiyle karşılaştırır. FILE dosyasındaki dosya listesini geçiyorum.

yapmam Yani Eğer

FILES=sftp.listdir('/path/') 
for F in FILE: 
    if F not in FILES: 
     do something 

Im zorlanıyor eşleşen

dosyanın adlandırma kuralı olan 2 çünkü XXX_NNNNNN_YYYYMMDD_.1.txt

DOSYALAR adlandırma kuralı XXX_NNNNN_YYYYMMDD_1.txt.ts<NNNNNNNNNN>.txt <NNNNNNNNNN> iken uzak sunucudan POSIX zamanı

+1

Yandaki: all-caps değişken adları (sabit isimlerin aksine) PEP-8'e aykırıdır. Python koduna uygun stil sözleşmeleri için https://www.python.org/dev/peps/pep-0008/ adresine bakın. –

+0

... Ayrıca, "bir argümana geçen dosyaların listesi [...]" dediğinizde - bir listeyi * tek bir argümana nasıl geçiriyorsunuz? Aslında bir argüman listesi mi? Bir glob tarzı/fnmatch ifadesi mi? Boşluk mu yoksa başka bir şekilde mi ayrılmış? –

+0

... her neyse, amacın nedir? Herhangi bir sonek ile öntanımlı bir dosyaya eşleştirmek için, herhangi bir sonek ile [.] Ts [0-9] + [.] Txt'? –

cevap

0
files = sftp.listdir("/path/") 
truncatedFilenames = set() 
for fn in files: 
    parts = fn.split(".") 
    ## re-join just the first 2 parts 
    truncatedFilenames.add(".".join(parts[:2])) 
for f in otherFileList: 
    if f not in truncatedFilenames: 
     ## do something 
+0

İçeriği yeniden birleştirmek için ihtiyaç duymaktan kaçınmak için 'rsplit() 'yi kullanmayın? –

+0

Bir sorun daha var. Eğer ftp'de aradığım dosyalarda eğer uzantı iyi ise .fileaccept olacaktır. Uzantıya dayalı olarak KABUL EDİLDİĞİNİZ VEYA REDDEDİLDİĞİNİ söylemeliyim. – Steve

+0

Veya sadece .fileaccept uzantılı dosyaları arayın. – Steve

İlgili konular