繁体   English   中英

如何在Python中用两个不同的文件夹编写由路径和文件名组成的2列的csv文件?

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

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

Col1 Col2
data / RGB / image_6_1.png,data / rear / depth / image_6_0.png该列表包含更多图像。

名称顺序应该相似。可能是zip函数会有所帮助吗?

在这种情况下,Python的izip_longest()很有用。 它将一次给您两个列表中的元素。 当一个列表用完时(即一个文件夹中的文件比另一个文件夹中的文件更多),默认情况下,该空白元素将返回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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM