簡體   English   中英

將某些文件從一個目錄移動到另一個目錄-Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM