如果文件出现在Python的文本文件中,则将文件从一个目录移动到另一个目录(取2)

时间:2013-12-10 01:20:11

标签: python move directory

好的,我将再次尝试这一点,为我在以前的问题上的不良努力道歉。

我正在用Java编写程序,我想根据它们是否出现在列表中,将一些文件从一个目录移动到另一个目录。我可以手动完成,但目录中有数千个文件,所以这将是一项艰巨的任务,我需要重复几次!我试图用Java做,但因为我使用的是Java,看来我不能使用java.nio,我不允许使用外部库。

所以我试着在python中写一些东西。

import os
import shutil

with open('files.txt', 'r') as f:
    myNames = [line.strip() for line in f]
    print myNames

dir_src = "trainfile"
dir_dst = "train" 
for file in os.listdir(dir_src):
    print file  # testing
    src_file = os.path.join(dir_src, file)
    dst_file = os.path.join(dir_dst, file)
    shutil.move(src_file, dst_file)

“files.txt”的格式为:

a.txt
edfs.txt
fdgdsf.txt

等等。

所以目前它正在将所有内容从列车移动到trainfile,但如果文件位于myNames列表中,我只需要移动文件。

有人有任何建议吗?

2 个答案:

答案 0 :(得分:0)

  

所以目前它正在从火车到火车文件移动所有东西,但是如果它们在myName列表中,则只需要移动文件

您可以将“如果它们在myName列表中”直接从英语翻译成Python:

if file in myNames:
    shutil.move(src_file, dst_file)

就是这样。

但是,您可能需要 set 名称,而不是列表。它更具概念意义。它也更有效,尽管与复制文件的成本相比,列表中查找速度可能会微不足道。无论如何,要做到这一点,你需要再换一行:

myNames = {line.strip() for line in f}

然后你就完成了。

答案 1 :(得分:0)

检查myNames列表中是否存在文件名 把它放在shutil.move之前

if file in myNames: