如何处理此TypeError:'in <string>'需要将字符串作为左操作数,而不是元组

问题描述

我正在尝试通过提供文件名列表(其给定类型为error)将某些特定文件一个文件夹复制到另一个文件夹,在此代码中我错了

import os
from os import path
import shutil

src = "D:/folder2"
dst = "D:/folder1"

files = [i for i in os.listdir(src) if ('7809.txt','988876.txt') in i and path.isfile(path.join(src,i))]
for f in files:
    shutil.copy(path.join(src,f),dst)

解决方法

您必须更改操作数的顺序:

files = [i for i in os.listdir(src) 
         if i in ('7809.txt','988876.txt') 
         and path.isfile(path.join(src,i))]

没有必要进行ispath()检查:除非您做的很奇怪,否则"{src}/7809.txt"已经是文件,而不是目录或其他东西。因此,您可以使用集合交集而不是列表理解:

files = set(os.listdir(src)) & {'7809.txt','988876.txt'}