この状況では、Pythonのizip_longest()
が便利です。それはあなたに両方のリストから一度に1つの要素を与えるでしょう。 1つのリストが使い尽くされると(すなわち、1つのフォルダ内に他のフォルダがある場合)、空の要素に対してデフォルトで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()
を安全にパスコンポーネントを一緒に連結するために使用されます。
ファイル名に数字が含まれているため、数値でソートするには、各名前を分割し、結果の文字列リストを可能な限り整数に変換する必要があります。これにより数値的にソートされます。
この例では、むしろ、独自のロジックを使用して、それをソートするよりも、あなたがそのようなnatsorted
としてライブラリを使用することができれば、
代わりのPython 2.xのために設計されている:
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
質問自体にコードを貼り付けてください。 –