如何将多个TXT文件的逐行频率分布转换为单个矩阵?每个文件都具有完全相同的结构,因为所有单词/术语/短语都以相同的顺序排列并包含在每个文件中。每个文件的唯一性是文件名,发布日期以及在“:”后加数字的单词/术语/短语的相应频率,请参见以下内容:
How my input files look like:
FilenameA Date:31.12.20XX
('financial' 'statement'):15
('corporate-taxes'):3
('assets'):8
('available-for-sale' 'property'):2
('auditors'):23
我有多个文件,它们的词/短语顺序完全相同,只是频率不同(“:”后面的数字)
现在,我想创建一个包含矩阵的文件,该文件将所有单词保留在第一列,并将文件特征(文件名,日期和频率)附加为按行输入:
Desired Output:
Filename Date ('financial' 'statement') ('corporate-taxes') ... ('auditors)
A 2008 15 3 23
B 2010 9 6 11
C 2013 1 8 4
...
.
.
非常感谢您的帮助,如果有一个循环可以从目录中读取所有文件并输出上述矩阵,那将非常棒。
以下代码应为您提供帮助:
import os
# Compute matrix
titles = ['Filename', 'Date']
matrix = [titles]
for directory, __, files in os.walk('files'): # replace with your directory
for filename in files:
with open(os.path.join(directory, filename)) as f:
name, date = f.readline().strip().split()
row = [name[8:], date.split('.')[-1]]
for line in f:
header, value = line.strip().split(':')
if len(matrix) == 1:
titles.append(header)
row.append(value)
matrix.append(row)
# Work out column widths
column_widths = [0]*len(titles)
for row in matrix:
for column, data in enumerate(row):
column_widths[column] = max(column_widths[column], len(data))
formats = ['{:%s%ss}' % ('^' if c>1 else '<', w) for c, w in enumerate(column_widths)]
# Print matrix
for row in matrix:
for column, data in enumerate(row):
print formats[column].format(data),
print
样本输出:
Filename Date ('financial' 'statement') ('corporate-taxes') ('assets') ('available-for-sale' 'property') ('auditors')
A 2012 15 3 8 2 23
B 2010 9 6 8 2 11
C 2010 1 8 8 2 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句