2011-07-11 15 views
5

Python'a yeni geldim, bu yüzden bu konuda tamamen yanlış olabilirim, ancak bir dosyanın dizinine geçme ve sorun giderme konusunda sorun yaşıyorum. Komut dizim, herhangi bir dizinde olabilen birden çok dosya adı alır. Komut dizimde, dosyanın dizinine geçmek için python'a ihtiyacım var ve daha sonra bazı eylemler gerçekleştirmeliyim. Ancak, dizinleri değiştirme konusunda sorun yaşıyorum. İşte Dosya Yollarını Biçimlendirme

Ben şimdiye kadar denedim budur:

path=os.path.split(<file path>) 
os.chdir(path[0]) 
<Do things to file specified by path[1]> 

yolu ben dosya yolunu alıyorum komut satırına kaşif sürükleyerek gereğidir. Bu yol adını "C:\foo\bar\file_name.txt" gibi bir şey olarak girer. Tercümandaki ilk satırı çalıştırdığımda ('C:\\foo\bar','file_name.txt') çıkarım. Sorun şu ki, herhangi bir nedenden ötürü son ters eğik çizgi otomatik olarak kaçmıyor, ben os.chdir(path[0]) satırını çalıştırdığımda hata alıyorum.

Sorunun nedeni, son ters eğik çizgi, diğerleri gibi otomatik olarak kaçmamasının nedenidir? Son ters eğik çizgiden nasıl manüel olarak kaçabilirim? Dosyanın dizinini almanın ve değiştirmenin daha iyi bir yolu var mı?

+0

Komut isteminde bir şeyler çalıştırmak için pythondan kabuk çıkarmak biraz sıradışı (her zaman yanlış olmasa da) bir şeydir. "Bazı eylemleri gerçekleştir" tam olarak nedir? Belki de doğrudan Python'da yapılabilirler. – Gerrat

+0

Sanırım rhololkeolke Python kabuğundan çıkıyor; Son zamanlarda fark ettiğim gibi, kabuk içinde iken yolu almak için dosyaları konsol penceresine sürükleyebilirsiniz. Tabii ki, eğer kabuğun dışında bir şey yapmak zorunda kalsanız bile, sadece tek bir eylemse, sadece os.system() 'yi kullanabilirsiniz. Birden fazla eylem olsa bile, sık sık tekrarlanan bir şey varsa, bir toplu iş dosyası yazabilir ve 'os.system()' kullanarak bunu çağırabilirsiniz. Tabii ki bunların hiçbiri, rhololkeolke'nin sorduğu şeyle ilgili değil. – JAB

cevap

5

Son ters eğik çizgi otomatik olarak kaçmıyor çünkü Python yalnızca ters eğik çizgi ile bir kaçış sırası oluşturmuyorsa, normal dizgelerde ters eğik çizgiden kaçıyor. Aslında, örneğinizde,'dan 'C:\\foo\bar' almazsanız, 'C:\x0coo\x08ar' alırsınız.

Ne yapmak istersiniz ters eğik çizgileri forwardlashes ile değiştirmek veya sürükle ve bırak işlemleri için daha basit hale getirmek için, sadece r yolunu önceden ham bir dize ve kaçış sıralarını tanımıyor .

>>> os.path.split(r"C:\foo\bar\file_name.txt") 
('C:\\foo\\bar','file_name.txt') 
+0

Teşekkürler. Şimdi mükemmel çalışıyor. – rhololkeolke

+0

Rica ederim. – JAB

2

Doğru modülleri ve yöntemleri kullanıyorsunuz. Python tersbölüleri davranmadım yapar

path=os.path.split(r'C:\foo\bar\file_name.txt') 

Not birinci alıntı önünde r,: içeride o pencere yolunu koyarak konum Sadece zaman, dizisinin bir ham dize yapmak, böylece komut gibi görünmelidir dizide kaçış dizileri olarak.

İlgili konular