所有
我需要将文件从一个目录移动到另一个目录,但我不想将该目录中的所有文件仅移动到以'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'
开头,而那些不以数字开头的元素将会有几百个,需要删除。
非常感谢每个人的帮助。
答案 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)))