[英]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)
当我使用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.