2015-09-12 269 views
1

我知道这个问题已经得到解答,但是我的应用程序使用了解决方案,但是我面临的错误无法解决。将文件夹从文件夹复制到文件夹python

我有一个文本文件中的数字列表,表示应复制的图像编号。这份名单是与此类似

7348 
    7352 
    7357 
    7360 
    7380 
    7381 
    . 
    . 
    . 

的图像与名字

IMG_7348.jpg 
    IMG_7349.jpg 
    . 
    . 
    . 

从文本文件中使用的数字,我想只有那些影像复制到不同的文件夹。这是Python代码我为同一

import os 
    import shutil 
    src = input('Enter the source folder'); 
    dest = input('Enter the destination folder'); 
    src_files = os.listdir(src) 
    with open("image_numbers.txt") as f: 
     lines = [line.rstrip('\n') for line in open('image_numbers.txt')] 
     for line in lines: 
      numbers_str = line 
      #print(numbers_str) 
      temp2 = str('IMG_')+numbers_str+str('.jpg') 
      #print(temp2) 
      for name_im in src_files: 
       #print(name_im) 
       print(name_im == temp2) 
       if name_im == temp2: 
        src_files_filt = temp2 
        #print('stored') 
      #numbers_float = [float(x) for x in numbers_str] 
      #map(float,numbers_str) works too 
    for file_name in src_files_filt: 
     full_file_name = os.path.join(src, file_name) 
     if (os.path.isfile(full_file_name)): 
      shutil.copy(full_file_name, dest) 
  1. 写道当我使用打印语句,我能看到改革后的图像名称,并从SRC的名字是相同的,但声明

    print(name_im == temp2) 
    

给我

false 

我无法找出原因

你能帮我解决这个错误吗?作为python的初学者,如果错误是基本的,请和我一起裸照。

+0

我编辑我的解释为问题1,我认为只是由于print语句的位置说明。 – qwertyuip9

回答

1

我不太确定为什么2个错误发生。你详细描述的第二个问题对我来说并没有发生,但是我修复了你的代码,使它更加清洁和更加pythonic。 “src_files_filt”会出现问题,因为最后一个for循环将其重复为一个列表,但“src_files_filt”只是一个字符串。我做了这样的事情,脚本在匹配文件名后立即执行文件更改。

编辑:再次查看问题1的程序,其中一些值应该返回false,因为存在其他文件不在文本文件中。如果将print语句放在if块中,它应该始终按预期返回true。

import os 
import shutil 

src = input('Enter the source folder'); 
dest = input('Enter the destination folder'); 
src_files = os.listdir(src) 

with open("image_numbers.txt") as f: 
    lines = [line.rstrip('\n') for line in open('image_numbers.txt')] 
    for line in lines: 
     numbers_str = line 

     temp1 = 'IMG_' + numbers_str + '.jpg' 

     for name_im in src_files: 
      if name_im == temp1: 
       full_file_name = os.path.join(src, temp1) 
       if (os.path.isfile(full_file_name)): 
        shutil.copy(full_file_name, dest) 
+0

谢谢队友。作为魅力工作! –

+0

没问题!乐意效劳。 – qwertyuip9

+0

好的,出于某种原因,它不能再次工作。相同的代码,不同的文件夹和文件,但现在不起作用。任何调试想法? –

1

打印(STR(name_im)== TEMP2)返回true

+0

谢谢队友。得到它了 –

1

您已经打开"image_numbers.txt"并通过各行迭代,所以你并不需要再次打开它遍历脱光“ \ N”。

lines = [line.rstrip('\n') for line in open('image_numbers.txt')] 

这可以通过条带化 “\ n” 个迭代for line in f时更容易实现。当我运行你的代码时,它并没有删除“\ n”,这使得它无法评估的print(name_im == temp2)。此外,您不能迭代for file_name in src_files_filt:,因为代码中的src_files_filt不是列表,而是它是单个文件的名称。

尝试以下操作:

import os 
import shutil 
src = input('Enter the source folder'); 
dest = input('Enter the destination folder'); 
src_files = os.listdir(src) 
src_files_filt = [] 
with open("image_numbers.txt") as f: 
    for line in f: 
     numbers_str = line.rstrip() 
     #temp2 = "IMG_%s.jpg" %(numbers_str) #another str manipulation method 
     temp2 = str('IMG_')+numbers_str+str('.jpg') 
     #print(temp2) 
     for name_im in src_files: 
      print(name_im) 
      print(name_im == temp2) 
      if name_im == temp2: 
       src_files_filt.append(temp2) 

for file_name in src_files_filt: 
    #print(file_name) 
    full_file_name = os.path.join(src, file_name) 
    #print(full_file_name) 
    if (os.path.isfile(full_file_name)): 
     shutil.copy(full_file_name, dest)enter code here 
相关问题