2015-02-11 3 views
1

Как преобразовать линейные частотные распределения из нескольких TXT-файлов в одну матрицу? Каждый из файлов имеет точно такую ​​же структуру, что все слова/термины/фразы находятся в одном порядке и содержатся в каждом файле. Уникальный для каждого файла этого имени файла, дата выдачи и соответствующая частота слов/терминов/фраз, приведенных рядом после «:», видит следующее:Python 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 
... 
. 
. 

Действительно оцените любую помощь, было бы здорово иметь цикл, который считывает все файлы из каталога и выводит вышеуказанную матрицу.

ответ

1

Следующий код должен помочь вам: выход

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  
Смежные вопросы