如何将多个TXT文件中的线性频率分布转换为单个矩阵?每个文件具有完全相同的结构,因为所有单词/术语/短语的顺序相同并包含在每个文件中。每个文件的唯一选项是文件名,发布日期以及“:”后面的数字给出的单词/术语/短语的相应频率,请参阅以下内容:
我的输入文件如何:
Company ABC-GH Date:31.12.2012
financial statement:4
corporate-taxes:8
assets:2
available-for-sale property:0
auditors:213
123-Company XYZ Date:31.12.2012
financial statement:15
corporate-taxes:3
assets:8
available-for-sale property:2
auditors:23
我有多个文件具有完全相同的单词/短语顺序,只有频率不同(数字背后的数字:“”)
现在我想创建一个包含矩阵的单个文件,它将所有单词保留为顶部列,并将文件特征(文件名,日期和频率)作为行方式附加,以逗号分隔以便进一步处理它们,即如果第三个逗号(第四个条目)之后的术语是“公司税”而不是每一行,则第四个条目应该是该文件中该术语的相关频率。
期望的输出:
Filename,Date, financial statement, corporate-taxes, .. auditors
COMPANY ABC-GH , 2008 , 15 , 3 , 23
123-COMPANY XYZ , 2010 , 9 , 6 , 11
最后,我想将结果写入TXT文件。你有什么想法吗?
答案 0 :(得分:0)
假设您有一个文件列表
lof = ['a1.txt', 'a2.txt', 'b1.txt']
您可以将结果初始化为空列表
res = []
然后在结果中附加为每个输入文件计算的特定列表推导
for f in lof:
res += [[entry.split(':')[1] for entry in cdata ]
for cdata in [data.splitlines() for data in open(f).read().split('\n\n')]]
让我们看一下理解的内部部分,对于一个与你的例子具有相同内容的文件,'ex.txt'
In [44]: [d.splitlines() for d in open('ex.txt').read().split('\n\n')]
Out[44]:
[['Company ABC-GH Date:31.12.2012',
'financial statement:4',
'corporate-taxes:8',
'assets:2',
'available-for-sale property:0',
'auditors:213'],
['123-Company XYZ Date:31.12.2012',
'financial statement:15',
'corporate-taxes:3',
'assets:8',
'available-for-sale property:2',
'auditors:23']]
理解的外部每个cdata
是什么?
In [45]: for cdata in [d.splitlines() for d in open('ex.txt').read().split('\n\n')]:
....: print cdata
....:
['Company ABC-GH Date:31.12.2012', 'financial statement:4', 'corporate-taxes:8', 'assets:2', 'available-for-sale property:0', 'auditors:213']
['123-Company XYZ Date:31.12.2012', 'financial statement:15', 'corporate-taxes:3', 'assets:8', 'available-for-sale property:2', 'auditors:23']
对于每个cdata
(即公司数据),我们想要一个仅包含:
之后的部分的列表,因此我们将分为':'
&只保留索引1
元素
In [46]: [[entry.split(':')[1]for entry in cdata]]
Out[46]: [['31.12.2012', '15', '3', '8', '2', '23']]
将它们整合在一个列表理解中只是一个问题
In [47]: [[entry.split(':')[1]for entry in comp_data ]for comp_data in [data.splitlines()for data in open('dele.txt').read().split('\n\n')]]
Out[47]:
[['31.12.2012', '4', '8', '2', '0', '213'],
['31.12.2012', '15', '3', '8', '2', '23']]
并将其放入我之前显示的循环中,累积所有输入文件的结果