将某些文件从一个目录移动到另一个目录 - Python

时间:2017-07-16 14:14:32

标签: python list file directory

所有

我需要将文件从一个目录移动到另一个目录,但我不想将该目录中的所有文件仅移动到以'pws'开头的文本文件。目录中所有文件的list为:

['pws1.txt', 'pws2.txt', 'pws3.txt', 'pws4.txt', 'pws5.txt', 'x.txt', 'y.txt']

如上所述,我想将'pws*'文件移动到另一个目录,而不是x和y文本文件。我想要做的是删除不以list开头的'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文本文件,但保留y文本文件。

我做错了什么。如何只生成以list开头的'pws'个文件,并删除不以'pws'开头的文本文件。

请记住,我可能有一个list,其中包含1000个元素,其中数百个元素将以'pws'开头,而那些不以数字开头的元素将会有几百个,需要删除。

非常感谢每个人的帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用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*',因此更好的方法是使用{{ 1}}内置方法,用于检查str.startswith()是否以提供的string开头。因此,在您的substring中,您可以使用loop,或者您可以使用if i.startswith('pws'),如上所述,这是一种更为诡辩的方法。

答案 1 :(得分:0)

移动文件: How to move a file in 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_)]

答案 2 :(得分:0)

只需使用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)))