2016-04-05 24 views
0

iPython kullanarak, bir dizindeki tüm metin dosyalarını döngülemeye çalışıyorum, her metin dosyasında bir işlem yap ("BEGIN" ile başlayan satırın ardından metin dosyasının bir bölümünü kes) ve sonra sonuçları başka bir temp.txt dosyasına kaydedin. Ancak, !cat file_path yaptığımda, file_path dizini almaz ve bunun yerine 'file_path' adlı bir dize olarak yorumlanır. file_path dizesini !cat tarafından kullanılabilecek hazır dizine dönüştürdüğüm var mı?dizeleri tamsayı dizinlerine dönüştürme

import os 
for fn in os.listdir('./dir'): 
    if fn.endswith('.txt'): 
     file_path='./dir'+fn 
     print "file path is:", file_path 
     !cat file_path | sed -e '1,/BEGIN/d'>temp.txt 

Çıkışlar:

file path is: ~/Documents/dir/doc.txt 
cat: file_path: No such file or directory 
+0

Bildiğim kadarıyla, dışarı çıkmak ve bir kabuk komutunu yapmak için '' cat'ı ekleyemezsiniz. "Altprocess.Popen" veya bunun gibi bir şey kullanmanız gerekir. Neden sadece python ile kırpmayı yapmıyorsunuz ya da hepsini bu şekilde karıştırmaya çalışmak yerine hepsini kabukta yapmıyorsunuz? (Bu da "işe yaramaz kedinin" kullanımına sahip) Bu IPython ve bu yüzden "!" Işte bu mu? Muhtemelen '' Belgeler'' istemiyorsunuz ama '~/Belgeler''i tahmin edebilir miyim? – beroe

+0

Her ikisini de karıştırmak için bu yolu daha temiz buldum. Ama evet, sadece Python/Unix'te yapmak mümkün. Ve evet bu iPython'dur ve herhangi bir noktada unix'i değiştirmek mümkündür! karakter ve doğru dizin ~/Belgeler. – Peyman

+0

Belki de "IPython" etiketini ekleyin – beroe

cevap

0

Sen bir Python ifadesi olarak işaretlemek için süslü parantez içinde file_path içine gerekiyor. Eğer bash kullanabilirsiniz bu durumda arada

import os 
for fn in os.listdir('./dir'): 
    if fn.endswith('.txt'): 
     file_path='./dir/'+fn 
     print file_path 

: Eğer dosya_yolu değişkeninde "/" eklemeyi unuttuğu Benim düşünceme göre

!cat {file_path} | sed -e '1,/BEGIN/d'>temp.txt 
+0

Mükemmel! Teşekkürler Daniel çalıştı! – Peyman

+0

@Peyman yardım edebildiğime sevindim! Bu tatlı itibar puanlarını toplayabilmem için onay işaretine tıklayarak kabul ettiğim cevabımı işaretlemekte özgürsünüz :) –

+0

evet kesinlikle! – Peyman

0

: Senaryonuzun bu kadar son satırı deneyin:

+0

eksiklik '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' dır. Ayrıca, burada yer almadığım kodun geri kalanının gereği olarak Python ve Bash'in bir kombinasyonunu kullanmak istedim :) – Peyman

İlgili konular