2015-11-12 16 views
1

大家好,我仍然在學習python 3,並且我更熟悉VBA。我有下面的python代碼,它所做的是對csv文件進行排序並將轉換保存到新文件中。目前,我可以在閒置狀態下運行此功能。我需要能夠將它定義爲一個函數,所以我可以從一個vba按鈕調用它。如何在python中編寫我的代碼作爲函數的困惑

from xlwings import Workbook, Range 
# file group_by_trailing_py2.py 
import os 
import csv 
from itertools import groupby 

DELIM=';' 
IN_FILENAME = 'My Product.csv' 
OUT_FILENAME = 'My Product.grouped.csv' 


keyfunc = lambda row: row[1:] 

with open(IN_FILENAME) as csv_file: 
    ``rows = sorted(csv.reader(csv_file, delimiter=DELIM), key=keyfunc) 

it = map(lambda t: [", ".join(v[0].strip() for v in t[1]) + " "] + t[0], 
    groupby(rows, key=keyfunc)) 

with open(OUT_FILENAME, 'w') as csv_file: 
    writer = csv.writer(csv_file, delimiter=DELIM) 
for row in it: 
    writer.writerow(row) 

回答

1
def f(): 
    DELIM=';' 
    IN_FILENAME = 'My Product.csv' 
    OUT_FILENAME = 'My Product.grouped.csv' 


    keyfunc = lambda row: row[1:] 
    with open(IN_FILENAME) as csv_file: 
     ``rows = sorted(csv.reader(csv_file, delimiter=DELIM), key=keyfunc) 

    it = map(lambda t: [", ".join(v[0].strip() for v in t[1]) + " "] + t[0], 
     groupby(rows, key=keyfunc)) 

    with open(OUT_FILENAME, 'w') as csv_file: 
     writer = csv.writer(csv_file, delimiter=DELIM) 
    for row in it: 
     writer.writerow(row) 

f() 
+0

如此簡單=)和它的作品你是最好的! @ user2393267 – Geoff

+0

你是最受歡迎的。 –