我有大量文件是根据逐渐更具体的标准命名的。
文件名的每个部分均以“ _”分隔,与该文件的详细分类有关。
命名对流看起来像这样:
TEAM_STRATEGY_ATTRIBUTION_TIMEFRAME_DATE_FILEVIEW
我想做的是遍历所有这些文件,然后列出每个命名约定存在多少次不同的出现的列表。
从本质上讲,这是我到目前为止所做的事情,我遍历了所有文件并列出了每个名称。然后,我用“ _”分隔每个名称,然后将每个名称附加到各自的类别列表中。
现在我正在尝试将它们导出到以列分隔的CSV文件中,这就是我遇到问题的地方
L = [teams, strategies, attributions, time_frames, dates, file_types]
columns = zip(*L)
list(columns)
with open (_outputfolder_, 'w') as f:
writer = csv.writer(f)
for column in columns:
print(column)
这是我要离开的名单的粗略估计:
[{'TEAM1'},
{'STRATEGY1', 'STRATEGY2', 'STRATEGY3', 'STRATEGY4', 'STRATEGY5', 'STRATEGY6', 'STRATEGY7', 'STRATEGY8', 'STRATEGY9', 'STRATEGY10','STRATEGY11', 'STRATEGY12', 'STRATEGY13', 'STRATEGY14', 'STRATEGY15'},
{'ATTRIBUTION1','ATTRIBUTION1','Attribution3','Attribution4','Attribution5', 'Attribution6', 'Attribution7', 'Attribution8', 'Attribution9', 'Attribution10'},
{'TIME_FRAME1', 'TIME_FRAME2', 'TIME_FRAME3', 'TIME_FRAME4', 'TIME_FRAME5', 'TIME_FRAME6', 'TIME_FRAME7'},
{'DATE1'},
{'FILE_TYPE1', 'FILE_TYPE2'}]
我希望最终结果看起来像这样:
Team1 STRATEGY1 ATTRIBUTION1 TIME_FRAME1 DATE1 FILE_TYPE1
STRATEGY2 ATTRIBUTION2 TIME_FRAME2 FILE_TYPE2
... ... ...
etc. etc. etc.
但是实际上只有第一行存储在CSV文件中。
有人可以帮助我了解如何在第一行之后进行迭代吗?我敢肯定,这是因为“团队”类型只有一个选项,但是我不希望这会阻碍它。
答案 0 :(得分:2)
我提到了答案,您必须转置结果并使用它。
请参阅下面的帖子,
Python - Transposing a list (rows with different length) using numpy fails。
我已经使用自然排序对整数进行排序,并在列表后面附加了空格以达到预期的效果。 对于较大的列表,自然排序较慢 您还可以使用第三方库
Does Python have a built in function for string natural sort?
def natural_sort(l):
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)
res = [[] for _ in range(max(len(sl) for sl in columns))]
count = 0
for sl in columns:
sorted_sl = natural_sort(sl)
for x, res_sl in zip(sorted_sl, res):
res_sl.append(x)
for result in res:
if (count > 0 ):
result.insert(0,'')
count = count +1
with open ("test.csv", 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(res)
f.close()
在打印到csv文件之前,应将列转换为列表 可以利用writerows方法来打印多行 https://docs.python.org/2/library/csv.html-您可以在此处找到更多信息
TEAM1,STRATEGY1,ATTRIBUTION1,TIME_FRAME1,DATE1,FILE_TYPE1
,STRATEGY2,Attribution3,TIME_FRAME2,FILE_TYPE2
,STRATEGY3,Attribution4,TIME_FRAME3
,STRATEGY4,Attribution5,TIME_FRAME4
,STRATEGY5,Attribution6,TIME_FRAME5
,STRATEGY6,Attribution7,TIME_FRAME6
,STRATEGY7,Attribution8,TIME_FRAME7
,STRATEGY8,Attribution9
,STRATEGY9,Attribution10
,STRATEGY10
,STRATEGY11
,STRATEGY12
,STRATEGY13
,STRATEGY14
,STRATEGY15