[英]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.