Лист Excel с записью всех данных в один столбец

У меня проблема с записью текста на лист Excel:

Вот мой код:

import xlwt

wbk = xlwt.Workbook()
sheet = wbk.add_sheet('python')
row = 0 # row counter
col = 0

f = open('newfile.txt')
for line in f:
    L = line.split('\t')
    for c in L:
        sheet.write(row,col,c)
    row += 1
wbk.save('example12.xls')

И вот input.txt:

Ename   DCname  Competency  Effort

Eng01   DC1 SW  30  
Eng02   DC2 HW  30  
Eng03   DC3 ME  40  
Eng04   DC2 SW  20  
Eng05   DC3 FW  40  
Eng06   DC3 SW  35  
Eng07   DC1 HW  25  
Eng08   DC3 SW  30  
Eng09   DC1 HW  35  
Eng10   DC3 SW  20  
Eng11   DC1 HW  40  
Eng12   DC3 SW  40  
Eng13   DC1 HW  30  
Eng14   DC1 HW  30  
Eng15   DC3 FW  40  

Но input.txt записывает только в один столбец, как я могу получить его для записи в разные столбцы?

2 ответа

Решение

Ваша проблема здесь:

for line in f:
    L = line.split('\t')
    for c in L:
        sheet.write(row,col,c)
    row += 1

col никогда не меняется с 0 поэтому он всегда пишет в один и тот же столбец. Вы можете увеличивать его во время этого цикла, но лучше использовать enumerate, enumerate возвращает индекс каждой итерации цикла, чтобы вы могли посчитать, в каком столбце чисел вы его используете. Как это:

for line in f:
    L = line.split('\t')
    for i,c in enumerate(L):
        sheet.write(row,i,c)
    row += 1

i это номер столбца, найденного в строке, поэтому он записывает каждый фрагмент данных в следующий столбец.

Если ваш входной текстовый файл разделен вкладками, должно работать следующее:

import csv

with open("input.txt", "r") as f_input, open("output.csv", "wb") as f_output:
    csv_input = csv.reader(f_input, delimiter="\t")
    csv_output = csv.writer(f_output)

    text = list(csv_input)
    csv_output.writerows(text)

Это даст вам файл, который можно открыть в Excel следующим образом:

Ename,DCname,Competency,Effort
Eng01,DC1,SW,30
Eng02,DC2,HW,30
Eng03,DC3,ME,40
Eng04,DC2,SW,20
Eng05,DC3,FW,40
Eng06,DC3,SW,35
Eng07,DC1,HW,25
Eng08,DC3,SW,30
Eng09,DC1,HW,35
Eng10,DC3,SW,20
Eng11,DC1,HW,40
Eng12,DC3,SW,40
Eng13,DC1,HW,30
Eng14,DC1,HW,30
Eng15,DC3,FW,40

Если вы хотите создать файл XLSX напрямую, используя openpyxl, можно использовать следующее:

import csv  
from openpyxl.workbook import Workbook

with open("input.txt", "r") as f_input:
    csv_input = csv.reader(f_input, delimiter="\t")

    wb = Workbook()
    ws1 = wb.active
    ws1.title = "Locations"

    for row in csv_input:
        ws1.append(row)

    wb.save(filename="output.xlsx") 
Другие вопросы по тегам