我有大量文件,这些文件是根据逐渐更具体的标准命名的。
文件名中由“_”分隔的每个部分都与该文件的深入分类相关。
命名约定如下:
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)
这是我对 list 的粗略估计:
[{'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 文件中。
任何人都可以帮助我理解如何迭代第一行吗?我确信这种情况正在发生,因为团队类型只有一个选项,但我不希望这阻碍它。
最佳答案
我提到了答案,你必须转置结果并使用它。
引用下面的帖子,
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
关于python - 使用 Zip 函数在 CSV 中创建数据长度不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54817576/