Python呼叫Windows CMD命令刪除檔案異常分析與解決
Windows下偶爾需要用到使用Python呼叫系統中的命令處理某些東西,在處理檔案的時候偶爾會遇到問題。問題基本上都會與Windows的CMD命令使用有關,而我對這個不是很熟悉。剛剛嘗試進行檔案的批量刪除發現遇到點小問題,做個簡單的小例子說明一下。
以下是用於測試的目錄以及檔案的目錄樹結構:
卷序列號為 00000031 2013:5089
E:.
│ exp_01.py
│
├─q a
│ a()【】1.txt
│
└─【】()
a c.txt
寫一個Python指令碼如下:
#!/usr/bin/python
import os
pwd = os.getcwd()
forroot,dirs,files in os.walk('./'):
os.chdir(root)
for each_file in files:
print("removing %s in%s" %(each_file,root))
try:
os.system("del%s" % each_file)
except:
print("remove %sfailed!" % each_file)
os.chdir(pwd)
執行結果如下;
E:\WorkSpace\01_程式語言\04_Python\exp_01>python exp_01.py
removing a()【】1.txt in ./q a
removing a c.txtin ./【】()
找不到E:\WorkSpace\01_程式語言\04_Python\exp_01\【】()\a
還不錯,只有一個錯誤報出來了。在看一下現在的目錄樹資訊:
資料夾 PATH 列表
卷序列號為 000000E32013:5089
E:.
│ exp_01.py
│
├─q a
└─【】()
a c.txt
由此大致可以得出這樣的結論:程式切換目錄的時候用的是Python自帶的功能,即使是呼叫了作業系統的介面在使用上也可以看做是Python固有的特性。而通過os模組呼叫系統功能的時候,呼叫的功能原則上是需要跟作業系統上功能使用方式完全一樣。這樣,出現的問題就是因為”a c.txt”的方式被識別成了兩個被空格分開的引數。我做了一下嘗試,其實這種情況下把不能夠分開的檔名用引號引起來,便是正確的用法。於是,恢復被刪除改動過的環境,再次修改程式碼如下;
#!/usr/bin/python
import os
pwd = os.getcwd()
forroot,dirs,files in os.walk('./'):
os.chdir(root)
for each_file in files:
if each_file != 'exp_01.py':
print("removing %s in%s" %(each_file,root))
try:
os.system("del%s" % ('"'+each_file+'"'))
except:
print("remove%s failed!" % each_file)
os.chdir(pwd)
程式執行結果:
E:\WorkSpace\01_程式語言\04_Python\exp_01>python exp_01.py
removing a()【】1.txt in ./q a
removing a c.txtin ./【】()
再看一下目錄樹;
資料夾 PATH 列表
卷序列號為 000000F92013:5089
E:.
│ exp_01.py
│
├─q a
└─【】()
這次執行中沒有遇到異常,所有檔案都被成功刪除掉。需要注意的是,程式碼中重新“包裝”Windows CMD命令列的時候,在不能分割的檔名兩邊加的是雙引號,這個是必須如此的。不像Python中單引號雙引號的使用沒有什麼區別,在Windows的CMD命令中這個倒是十分固定的。