Python txt文件中的逗号分隔矩阵

Python txt文件中的逗号分隔矩阵,python,matrix,multiple-columns,word-frequency,Python,Matrix,Multiple Columns,Word Frequency,如何将多个TXT文件中的逐行频率分布转换为单个矩阵?每个文件都有完全相同的结构,因为所有单词/术语/短语的顺序都相同,并且包含在每个文件中。每个文件的唯一性是文件名、发布日期以及由“:”后面的数字给出的单词/术语/短语的频率,请参见以下内容: 我的输入文件的外观: Company ABC-GH Date:31.12.2012 financial statement:4 corporate-taxes:8 assets:2 available-for-sale property:0 auditor

如何将多个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('\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']]

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

到目前为止您编写了哪些代码?非常感谢您的帮助,这几乎就是我所需要的。我还有3个问题,我希望你也能回答:1)是否有办法以第一个频率(即不是日期“2012年12月31日”)开始结果列表。2) 当我向outfile.write(str(res))这样的文件写入“res”时,是否有办法将每个公司文件,即每个内部列表元素放在一个单独的行中['4','8','2','0','213'\n'15','3','8','2','23'\n]?3) 文件列表(“lof”)中的每个文件名的结构为:CompanyName SerialNumber:IssueDate_IFRS.txt。我能在频率之前提取每一行的信息吗?我想要的输出是这样的:'CompanyNameA'、'SerialNumberA'、'issuedtea'、'FrequencyA1'、'FrequencyA2'、…'frequencycyan'\newline'CompanyNameB'、'SerialNumberB'、'issuedteb'、'FrequencyB1'、'FrequencyB2'、'FrequencyBN'\newline…多米尼克,我试着回答你的要求。。。或者至少是我以为你问的。。。现在您意识到您的问题需要不同的解决方案,并对您的需求给出了新的解释(很抱歉,我无法理解)。我该怎么办?请尝试提出一个新问题,其中清楚地显示了两个或三个数据文件、它们的名称、您编写的一些代码和所需输出的正确示例,有人可能会帮助您。谢谢GBOFI,我试图更好地阐述我的意图,希望您现在理解我的问题,您的解决方案已准备就绪,非常接近。以下是更新问题的链接: