繁体   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