Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 重新循环直到找到所有匹配项,逻辑?_Python 3.x_For Loop_Glob - Fatal编程技术网

Python 3.x 重新循环直到找到所有匹配项,逻辑?

Python 3.x 重新循环直到找到所有匹配项,逻辑?,python-3.x,for-loop,glob,Python 3.x,For Loop,Glob,我想不出这其中的逻辑。我正在尝试将“匹配项”列表与文件夹中的文件进行比较。如果“文件夹”中的文件与“匹配”中的名称相同,则执行某些操作,但显然不会“尝试”每个文件的每个匹配。我想我需要使用while循环,但我不知道如何应用它 import os import glob import os.path folders = glob.glob('C:\\Corrections\\*.*') matches = open('filename.txt', 'r') for each in folder

我想不出这其中的逻辑。我正在尝试将“匹配项”列表与文件夹中的文件进行比较。如果“文件夹”中的文件与“匹配”中的名称相同,则执行某些操作,但显然不会“尝试”每个文件的每个匹配。我想我需要使用while循环,但我不知道如何应用它

import os
import glob
import os.path

folders = glob.glob('C:\\Corrections\\*.*')
matches = open('filename.txt', 'r')

for each in folders:
    splitname_one = each.split('\\', 3)   #Separate the filename from the path
    filename = splitname_one[3]           #Get Filename only
    basefile = filename.split('.', 1)     #Separate filename and file extension
    compare0 = basefile[0]                #assign base file name to compare0
    #print (basefile[0])
    for line in matches:
        match = line.split('.', 1)        #Separe base filename from file extension
        #print (match[1])
        compare1 = match[0]               #assign base file name to compare1
        if compare1==compare0:
            #os.rename(filename, 'C:\\holder\\' + filename)
            print ('We Have a match!')
        else:
            print ('no match :( ')

FWIW以下是我最终可能做的事情:

import glob
from os.path import basename, splitext

def file_base(filename):
    return splitext(basename(filename))[0]

folders = set(file_base(f) for f in glob.glob('C:\\Corrections\\*.*'))

with open('filename.txt') as fobj:
    matches = set(file_base(f) for f in fobj.readlines())

print(folders.intersection(matches))

外部循环每次都在文件对象上循环。当文件在您第一次循环时到达EOF时,后续通过外部循环的过程将不起任何作用,因为
匹配项中没有剩余的行。只需执行
matches=open(…).readlines()
或其他操作。仅供参考如果您只想获取路径的文件名或目录部分,可以使用
os.path.dirname
os.path.basename
。您还可以使用
os.path.splitext
拆分文件扩展名。如果文件名
包含.multiple.dots
,您当前的代码将中断。我将对此进行审阅并进行回复,我希望了解代码的每个部分的功能,即使它工作正常:)谢谢。