Birden çok günlük dosyasını ayrıştırmak ve işlenmiş dosyaların listesini korumak için bir komut dosyası yazıyorum. Ben dosyaların listesini okuduğunda ben os.walk
kullanmak ve aşağıdakine benzer adları almak işlemek için:Python - Can (veya yapmalıyım) os.path.sep'yi değiştirdim mi?
C:/Users/Python/Documents/Logs\ServerUI04\SystemOut_13.01.01_20.22.25.log
Bu aşağıdaki kodu tarafından oluşturulur:
filesToProcess.extend(os.path.join(root, filename) for filename in filenames if logFilePatternMatch.match(filename))
O "kök" ileri kullanıldığı anlaşılmaktadır ayırıcı olarak eğriler (Ben Windows'dayım ve bunu daha kullanışlı buluyorum) ama "dosya adı" ters eğik çizgi kullanır, bu yüzden ayırıcı olarak ileri ve geri eğik çizgi karışımını içerdiği için dosya için tutarsız bir yolla sonuçlanır.
Birlikte ayırıcı ayarlama denedim:
os.path.sep = "/"
ve .join önce
os.sep = "/"
ama hiçbir etkisi var gibi gözüküyor. Teoride, dizeyi manipüle edebildiğimi ancak daha uzun vadede, betiğimin Unix ve Windows üzerinde çalışmasını istediğimi fark ettim, bu yüzden eğer mümkünse dinamik olmasını tercih ederim.
Bir şey mi eksik?
Güncelleme:
benim sorunum kendine zararı olduğu gibi kolaylık olması için böyle kökü olarak kullanılan ilk yolu batmıştı, bakar aşağıda yararlı yanıtları dayanarak:
logFileFolder = ['C:/Users/Python/Documents/Logs']
bunu değiştiğinde Buna:
logFileFolder = ['C:\\Users\\Python\\Documents\\Logs']
Her şey çalışır ve sonuçta elde ettiğim dosya yollarının tümü "\" yi kullanır. Benim yaklaşımımın yanlış olduğunu düşündüğümde, Python'u bir değer olarak belirlediğim şeyi düzeltmekten ziyade davranışları değiştirmeye çalışıyorum.
Teşekkür ederiz!
Bir kol çıkmak ve 'ayarı os.sep' muhtemelen doğru olmadığı söylerim vb çapraz OS, web, ftp, çalışacak çözüm. –
olası nüshası [Neden os.path.join kullanımı os.path.sep veya os.sep?] (Http://stackoverflow.com/questions/12086224/why-not-os-path-join-use-os -path-sep-or-os-sep) – BrenBarn
Bu yinelenen soruya işaret eden bir anser olarak, 'os.path' işletim sisteminize bağlı olarak 'posixpath' veya 'ntpath 'içe aktarılarak çalışır. İlginç bir şekilde, bu modüllerin kaynak kodunda, yol ayırıcının 'join' işlevinin içinde bir dize değişmezi olarak kodlanmış olduğunu görebilirsiniz, böylece kendi' join' işlevini yazmadan değiştiremezsiniz. – BrenBarn