如何编写一个包含 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
我想创建一个包含 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