2017-02-10 17 views
1

Im создает сценарий для запуска повторяющихся тестов, каждый с файлом журнала, который будет считан и скомпилирован в электронную таблицу.Как читать несколько текстовых файлов по строкам и отправлять excel, перемещаясь в новый столбец после каждого файла?

Количество файлов и строк в каждом будет варьироваться в зависимости от времени и желаемых итераций. У меня есть базовый скрипт для чтения одного файла за строкой и вставки данных в отдельный документ excel в последовательные строки.

from openpyxl import load_workbook 
from Test_Parameters import Results_Name 
from Downstream import Log_Angle 

wb = load_workbook(filename= Results_Name +'.xlsm', read_only=False, keep_vba=True) 
ws7 = wb['timeData'] 

FILE = open('0_Downstream.txt', 'r+') 
line = FILE.readline() 
N = '2' 


while line !="": 
    print(line) 
    ws7['A'+N] = line 
    line = FILE.readline() 
     N = float(N) 
     N = (N+1) 
     N = "%g" % N 
    wb.save(Results_Name+'.xlsm') 

    FILE.close() 

Мне нужно, чтобы иметь возможность получить это цикл через несколько файлов в одном каталоге и поместить результаты в отдельной колонке, чем последний. Как на листе ниже: Excel Layout

Спасибо за любую помощь.

+0

глядя на существующий код, который я предложил бы увеличивая значение столбца 'WS7 [ 'A' + N] = строка 'каждый раз, когда вы открываете новый файл. – CJC

+0

Вы хотите, чтобы каждая строка была добавлена ​​в файл excel в виде столбца или строки? – Shijo

+0

Код выглядит неполным: что вы делаете с 'N'? –

ответ

0

Не используйте ws['A'+N] для программного доступа.

Я думаю, что следующий, вероятно, близка к тому, что вы хотите:

col_idx = ws.max_column + 1 
for row_idx, line in enumerate(file, 1): 
    if line == "": 
     break 
    ws.cell(row=row_idx, col=col_idx, value=line) 
wb.save(…) 
0
import os 
cwd = os.getcwd() 

for filename in os.listdir(cwd): 
    if filename.endswith(".txt"): 
     with open('%s\\%s' % (cwd, filename), 'r+') as file: 
      [DO STUFF] 

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

Помогает ли это?

0

Я думал вдоль тех же условиях, что и Лука (просто взял немного дольше, печатая):

from openpyxl import load_workbook 
from Test_Parameters import Results_Name 
from Downstream import Log_Angle 
import os 



def good_name(): 
    wb = load_workbook(filename=Results_Name + '.xlsm', read_only=False, keep_vba=True) 
    ws7 = wb['timeData'] 

    for path in os.listdir('dir_path'): 
     # You can use glob here if you have other extensions than .txt 
     ws = load_sheet(path, ws7) 
    wb.save(Results_Name + '.xlsm') 

def load_sheet(file_path, ws): 
    with open(file_path, 'r+') as FILE: 
     # This context manager is a cleaner way to open/close our file handle 
     line = FILE.readline() 
     N = '2' 
     while line !="": 
      print(line) 
      ws['A'+N] = line 
      line = FILE.readline() 
      N = float(N) 
      N = (N+1) 
      N = "%g" % N 
    return ws 
0
  1. Этот образец читает все файлы в тестовом/TXT
  2. Использует для каждого файла новый столбец
  3. файла назначены до строки 1
  4. Добавляет все считывающие линии, начиная с строки 2

    # List all files in test/txt' 
    dirName = os.path.join('test', 'txt') 
    
    for column,fname in enumerate(os.listdir(dirName),1): 
        # Column Title = Filename 
        ws.cell(row=1, column=column, value=fname) 
    
        # My Sample Text files are utf-8 encoded 
        with io.open(os.path.join(dirName, fname),'r', encoding='utf8') as fh: 
        # Column Data begins on Row 2 
        for row,line in enumerate(fh,2): 
         ws.cell(row=row, column=column, value=line) 
        #end with = closing fh 
    #end for 
    

    Испытано с Python: 3.4.2 - openpyxl: 2.4.1 - LibreOffice: 4.3.3.2 *