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