用逗号将Matrix与txt文件分隔开



如何将多个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文件。你有主意吗?

假设您有一个文件列表

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('nn')]]

让我们来看看理解的内部,对于一个与您的示例'ex.txt' 内容相同的文件

In [44]: [d.splitlines() for d in open('ex.txt').read().split('nn')]
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('nn')]:
   ....:     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('nn')]]
Out[47]: 
[['31.12.2012', '4', '8', '2', '0', '213'],
 ['31.12.2012', '15', '3', '8', '2', '23']]

并将其放入我之前展示的循环中,累积所有输入文件

的结果

最新更新