繁体   English   中英

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

[英]copy files from folder to folder 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) 

给我

    false

我无法弄清楚原因

你能帮我修一下这个错误吗?

我不太清楚为什么会出现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)

print(str(name_im)== temp2)返回true

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

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

当迭代for line in f通过条带化“\\ n”可以更容易地实现这一点。 当我运行你的代码时,它没有删除“\\ n”,这阻止了它在print(name_im == temp2)评估True 此外,您无法for file_name in src_files_filt:迭代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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM