我知道这个问题已经得到解答,但是我的应用程序使用了这些解决方案,但面临的问题却无法解决。
我在文本文件中有一个数字列表,表示应该复制的图像编号。该列表与此类似
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
我无法找出原因
你能帮我解决一下错误吗?
答案 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