2014-09-01 99 views
-3

有時用空格替換下劃線是有用的。在Linux機器上,這對我很好:如何使用ipython替換dir下劃線的空格?

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \; 

在windows上,我想用ipython來做。我想很多人可能遇到了這個問題,你如何在ipython中實現它?

謝謝!

編輯: 我對此誤解表示歉意。這是我的腳本:

import os 

def rm_space(): 
    for filename in os.listdir("."): 
     if filename.find(" ") > 0: 
      newfilename = filename.replace(" ", "_") 
      os.rename(filename, newfilename) 

這段代碼確實用空格替換下劃線;但是,有一個問題:如何用遞歸替換

我認爲這是一個非常普遍的問題,可能已經有一種慣用的方法來解決它(就像上面的shell腳本一樣)。

+4

看起來您希望我們爲您編寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出和實際獲得的輸出(控制檯輸出,堆棧跟蹤,編譯器錯誤 - 無論是適用)。您提供的細節越多,您可能會收到的答案就越多。 – 2014-09-01 10:53:38

回答

0

How to substitute recursively?

使用OS.walk()而不是listdir同時

+0

謝謝你的提示和教程鏈接!我得到這個錯誤:AttributeError:'tuple'對象沒有屬性'find'那麼如何搜索文件/目錄名稱中的空格? 我是編程新手,我正在學習示例。在我的理解中,元組是不可變的,那麼如何替換? – Nick 2014-09-01 12:53:45

+0

嗨,尼克。你會注意到OS.walk返回一組3個值;這是錯誤所指的元組。在鏈接的例子中,它們將它映射到「root,dirs,files」,在'for root,dirs,OS.walk'中的文件中。您可能想要檢查'files'組件正在返回的內容。 – RJFalconer 2014-09-01 14:40:10

+0

謝謝RJFalconer!我以這種方式試過了:'import os def rm_space(): for root,dirs,os.walk中的文件(「。」): 對於文件中的fn: if fn.find(「」)> 0 : N = files.replace(」」, 「_」) 如果n = FN: os.rename(FN,N) 其他: os.rename(FN, 「_」 + N)' 但失敗。我知道在編寫有效的代碼之前,我可能會學習更多關於python和api的知識;但是,我需要完成這項工作。這就是爲什麼我一直在努力。 – Nick 2014-09-02 01:50:02

1

代碼從計算器和編輯複製,作品在我的Mac。

import os 
import sys 

directory = sys.argv[1] # parse through file list in the current directory 

for filename in os.listdir(directory): # parse through file list in the current directory 

    if filename.find(" ") > 0: # if an space is found 

     newfilename = filename.replace(" ","_") # convert underscores to space's 

     old_file_path = os.path.join(directory, filename) 
     new_file_path = os.path.join(directory, newfilename) 

     os.rename(old_file_path, new_file_path) # rename the file, note that arg[] of os.rename is path_of_file, that explains 2 lines of code above  
相關問題