如何编写一个包含 2 列的 csv 文件,其中包含来自 Python 中两个不同文件夹的路径+文件名?

How to write a csv file with 2 columns consisting of path+filenames from two different folders in Python?

我想创建一个包含 2 列的 csv 文件,其中包含连接的路径 + 文件名。第一列应包含文件夹 1 的路径+文件名,第二列应包含文件夹 2 的路径+文件名。 两个操作应该是并行的。

第 1 栏第 2 栏
data/RGB/image_6_1.png, data/rear/depth/image_6_0.png 该列表有更多图片。

名称顺序应该是 similar.May 是一个 zip 函数会有帮助吗?

Python 的 izip_longest() 在这种情况下很有用。它将一次为您提供两个列表中的一个元素。当一个列表用完时(即一个文件夹中的文件多于另一个),默认情况下它将 return None 用于空元素。有了这个,您就可以将每个文件夹中的文件列表传递给它,并使用 Python 的 csv 库将它们写入您的 CSV 文件,如下所示:

from itertools import izip_longest
import os
import csv


def numbers(x):
    s = x.split('_')
    output = []

    for v in s:
        try:
            output.append(int(v))
        except ValueError as e:
            output.append(v)

    return output   

folder1 = r"/my/folder1"
folder2 = r"/my/folder2"

with open('output.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output)

    for f1, f2 in izip_longest(sorted(os.listdir(folder1), key=numbers), sorted(os.listdir(folder2), key=numbers)):
        p1 = p2 = ''

        if f1:
            p1 = os.path.join(folder1, f1)
        if f2:
            p2 = os.path.join(folder2, f2)

        csv_output.writerow([p1, p2])

os.path.join() 用于安全地将路径组件连接在一起。

由于您的文件名包含数字,要按数字排序,您需要拆分每个名称并将生成的字符串列表尽可能转换为整数。这将让它按数字排序。

此示例专为 Python 2.x


或者,如果不是使用您自己的逻辑对其进行排序,您可以使用诸如 natsorted:

之类的库
from itertools import izip_longest
from natsort import natsorted
import os
import csv


folder1 = r"/my/folder1"
folder2 = r"/my/folder2"

with open('output.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output)

    for f1, f2 in izip_longest(natsorted(os.listdir(folder1)), natsorted(os.listdir(folder2))):
        p1 = p2 = ''

        if f1:
            p1 = os.path.join(folder1, f1)
        if f2:
            p2 = os.path.join(folder2, f2)

        csv_output.writerow([p1, p2])

可以使用以下方式安装:

pip install natsorted