[英]Move Certain Files from One Directory to Another - Python
所有,
我需要將文件從一個目錄移動到另一個目錄,但我不想僅將以'pws'
開頭的文本文件移動到該目錄中。 該list
中所有文件的list
為:
['pws1.txt', 'pws2.txt', 'pws3.txt', 'pws4.txt', 'pws5.txt', 'x.txt', 'y.txt']
如前所述,我想將'pws*'
文件移動到另一個目錄,而不是x和y文本文件。 我要做的是刪除list
中所有不以'pws'
開頭'pws'
。 我的代碼如下:
loc = 'C:\Test1'
dir = os.listdir(loc)
#print dir
for i in dir:
#print i
x = 'pws*'
if i != x:
dir.remove(i)
print dir
輸出不保留我想要的
它從list
刪除x文本文件,從list
刪除偶數,但保留y文本文件。
我究竟做錯了什么。 如何僅list
以'pws'
開頭的文件,並刪除不以'pws'
開頭的文本文件。
請記住,我可能有一個包含1000個元素的list
,而其中的數百個元素將以'pws'
開頭,而那些不'pws'
開頭的元素(數百個)將需要刪除。
非常感謝大家的幫助。
您可以使用list-comprehension
來重新創建list
,如下所示:
dir = [i for i in dir if i.startswith('pws')]
或者更好的是,在開始時定義:
loc = 'C:\\Test1'
dir = [i for i in os.listdir(loc) if i.startswith('pws')]
print dir
說明:
當您使用x = 'pws*'
然后檢查if i == x
,您正在比較元素i
是否等於'pws*'
,因此更好的方法是使用內置方法str.startswith()
將檢查string
是否以提供的substring
string
開頭。 因此,在loop
,可以使用if i.startswith('pws')
,也可以使用上面提到的list-comprehension
,這是一種更加Python化的方法。
移動文件: 如何在Python中移動文件可以使用os.rename(origin,destination)
origin = r'C:\users\JohnDoe\Desktop'
destination = r'C:\users\JohnDoe\Desktop\Test'
startswith_ = 'pws'
然后繼續進行列表理解
# Move files
[os.rename(os.path.join(origin,i),os.path.join(destination,i)) for i in os.listdir(origin) if i.startswith(startswith_)]
只需使用一個glob
。 這為您提供了目錄中的文件列表,而沒有所有listdir
調用和子字符串匹配:
import glob,os
for f in glob.glob('/tmp/foo/pws*'):
os.rename(f, '/tmp/bar/%s'%(os.path.basename(f)))
編輯1:這是您的原始代碼,使用glob
進行了簡化,並定義了一個新變量loc2作為將其移動到的位置:
import os,glob
loc = 'C:\Test1'
loc2 = 'C:\Test2'
files = glob.glob('%s\pws*'%(loc))
for i in files:
os.rename(i,'%s\%s'%(loc2,os.path.basename(i)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.