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