Python 使用os.walk()连接子目录

Python 使用os.walk()连接子目录,python,python-3.x,Python,Python 3.x,我无法访问左列表和右列表来加入它们的路径,因为它们肯定超出了范围 谁能告诉我如何用更好的代码结构来解决这个问题吗?您可以在for之外初始化列表 with open('images.txt', 'w') as text_file: for folderName, subfolders, f in os.walk(root_folder): for subfolder in subfolders: if subfolder == 'image_02':

我无法访问
左列表
右列表
来加入它们的路径,因为它们肯定超出了范围

谁能告诉我如何用更好的代码结构来解决这个问题吗?

您可以在for之外初始化列表

with open('images.txt', 'w') as text_file:
    for folderName, subfolders, f in os.walk(root_folder):
        for subfolder in subfolders:
            if subfolder == 'image_02':
                left_path = os.path.join(folderName, subfolder, 'data')
                left_list = [f for f in sorted(os.listdir(left_path)) if
                             not f.startswith('.') and f.endswith('.png')]
            elif subfolder == 'image_03':
                right_path = os.path.join(folderName, subfolder, 'data')
                right_list = [f for f in sorted(os.listdir(right_path)) if
                              not f.startswith('.') and f.endswith('.png')]
    if len(left_list) != len(right_list):
        print('ERROR: directory {} does not match with {}'.format(left_path, right_path))
        continue

    for left_file, right_file in zip(left_list, right_list):
        text_file.write(
            os.path.join(left_path, left_file) + " " + os.path.join(right_path, right_file) + "\n")

这将是一个更好的方式

您将使用新值覆盖列表,而旧值将在此处丢失。您不是每次都在if语句中覆盖列表吗?所以问题是您丢失了旧值?什么是
数据
只是目录结构中的一些文件<代码>数据只是该文件夹中的另一个目录,我们有图像
子文件夹
将仅出现在第一个循环中。在随后的循环中它是空的。最好说明一下您的目录结构!
with open('images.txt', 'w') as text_file:
    left_list = []
    right_list = []

    for folderName, subfolders, f in os.walk(root_folder):
        for subfolder in subfolders:
            if subfolder == 'image_02':
                left_path = os.path.join(folderName, subfolder, 'data')
                left_list = [f for f in sorted(os.listdir(left_path)) if
                         not f.startswith('.') and f.endswith('.png')]
            elif subfolder == 'image_03':
                right_path = os.path.join(folderName, subfolder, 'data')
                right_list = [f for f in sorted(os.listdir(right_path)) if
                          not f.startswith('.') and f.endswith('.png')]
    if len(left_list) != len(right_list):
        print('ERROR: directory {} does not match with {}'.format(left_path, right_path))
        continue

    for left_file, right_file in zip(left_list, right_list):
        text_file.write(
        os.path.join(left_path, left_file) + " " + os.path.join(right_path, right_file) + "\n")
    with open(dataset['destination'], 'w') as text_file:
        left_list = []
        right_list = []

        for folderName, subfolders, f in os.walk(root_folder):
            for subfolder in subfolders:
                if subfolder == 'image_02':
                    left_path = os.path.join(folderName, subfolder, 'data')
                    for f in sorted(os.listdir(left_path)):
                        if not f.startswith('.') and f.endswith('.png'):
                            left_list.append(f)
                elif subfolder == 'image_03':
                    right_path = os.path.join(folderName, subfolder, 'data')
                    for f in sorted(os.listdir(right_path)):
                        if not f.startswith('.') and f.endswith('.png'):
                            right_list.append(f)

        if len(left_list) != len(right_list):
            print('ERROR: directory {} does not match with {}'.format(left_path, right_path))
            continue

        for left_file, right_file in zip(left_list, right_list):
            text_file.write(
                os.path.join(left_path, left_file) + " " + os.path.join(right_path, right_file) + "\n")