将文件从文件夹复制到文件夹python

时间:2015-09-12 14:52:56

标签: 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. 当我使用print语句时,我会看到改进后的图像名称和src中的名称是相同的,但语句

    print(name_im == temp2)
    
  2. 给了我

        false
    

    我无法找出原因

    你能帮我解决一下错误吗?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

print(str(name_im)== temp2)return true

答案 2 :(得分:1)

您已经打开"image_numbers.txt"并遍历每一行,因此您无需再次打开它来迭代以消除" \ n"。

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

这可以通过条带化来更容易地实现" \ n"在迭代for line in f时。当我运行你的代码时,它没有删除" \ n"这阻止了它评估True中的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