2017-08-23 26 views
0

我想創建一個csv文件,其中包含2個由連接的路徑+文件名組成的列。第一列應包含Folder1的路徑+文件名,第二列應包含文件夾2的路徑+文件名。 這兩個操作應該是並行的。如何編寫一個csv文件,其中包含兩列,包括來自Python中兩個不同文件夾的路徑+文件名?

Col1中col2的
數據/ RGB/image_6_1.png,數據/後/深度/ image_6_0.png 該列表具有多個圖像。

名稱的排序應該是相似的。可能是zip函數會有幫助嗎?

+0

請將代碼粘貼到問題本身中。 –

回答

0

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 
+0

感謝馬丁它的工作原理。但是一個小問題。 此代碼中不保留名稱順序。 data/RGB/image_6_1.png,data/rear/depth/image_6_0.png 獲取csv的 data/RGB/image_55_1.png,data/rear/depth/image22_0.png 兩者都應該對應或需要排序。 – Varun

+0

'listdir()'的輸出可以在傳遞給'izip_longest()'之前進行排序。不過就你而言,你的名字需要額外的努力來按照數字排序而不是按字母順序排序。 –

+0

有關如何繼續操作的任何建議。如果我沒有對它進行排序,那麼csv文件的生成根本就沒有用處。 – Varun

相關問題