从.txt文件创建列表以在Excel上写入

时间:2014-04-23 21:03:53

标签: python excel

我正在尝试从.txt文件中的大量数据创建列表。 我想通过excel来显示它们并显示我一直在这样做来创建一个迭代列表,它将写在每一列中。但是我得到的错误是我没有定义j。

import xlwt

f=open('inputfile.txt')
c=1

for lines in f:
    #split = f.split('\t')
    style0=xlwt.easyxf('font:name Times New Roman,colour black,bold on')
    wb=xlwt.Workbook()
    ws=wb.add_sheet('Database',cell_overwrite_ok=True)
    for i,row in enumerate(lines):
        ws.write(i,j,col)
        print(str(c))
        c=c+1
    wb.save('Prueba.xls')

另外我想问一下,如果可以从.txt的两行创建一个列表?

3 个答案:

答案 0 :(得分:0)

您尚未定义变量 j和col (而是定义了此处未使用的额外变量行),您必须定义变量。

  for i,row in enumerate(lines):

你必须在这里定义j for i,j, col in enumerate(lines):

答案 1 :(得分:0)

那是因为你确实没有定义j

您也没有定义col

也许你的意思是:

import xlwt

f=open('inputfile.txt')
c=1

for lines in f:
    #split = f.split('\t')
    style0=xlwt.easyxf('font:name Times New Roman,colour black,bold on')
    wb=xlwt.Workbook()
    ws=wb.add_sheet('Database',cell_overwrite_ok=True)
    for i,j in enumerate(lines):  # change to define j
        ws.write(i,j,c)           # change to use c instead of col
        print(str(c))
        c=c+1
    wb.save('Prueba.xls')

但是这对我来说仍然没有多大意义,因为我想你正在寻找2D输出。

另一件事是当你遍历一个文件,即for line in file时,你将遍历每一行,所以第二个循环似乎被错误标记或误解。

也许你的意思是:

import xlwt

f=open('inputfile.txt')
c=1

style0=xlwt.easyxf('font:name Times New Roman,colour black,bold on')
wb=xlwt.Workbook()
ws=wb.add_sheet('Database',cell_overwrite_ok=True)

for row_num,lines in f:
    for col_num,entry in enumerate(lines.split('\t')):
        ws.write(row_num,col_num,entry)
        print(str(c))
        c=c+1
    wb.save('Prueba.xls')

f.close() # Make sure you close your files!

您还需要确保close您的文件,即file.close()完成后。

我建议进行一些大修

我的猜测是从你注释掉的代码部分出来,你正在处理一个制表符分隔的文本文件?在这种情况下,我会建议以下修订:

import xlwt

with open('inputfile.txt') as f:
    c=1
    wb=xlwt.Workbook()
    style0=xlwt.easyxf('font:name Times New Roman,colour black,bold on')
    ws=wb.add_sheet('Database',cell_overwrite_ok=True)
    for i,line in f:
        for j,entry in line.split('\t'):
            ws.write(i,j,entry)                        # change to use c instead of col
            print(str(c))
            c=c+1
    wb.save('Prueba.xls')

现在,我们将使用xlwt创建一个文本制表符分隔转换为Excel。

我的更改:

  1. 切换到with open('file','r') as f:语法,多一点pythonic并处理关闭您提供的代码中缺少的文件。
  2. 将初始化组织在循环外而不是在循环中。
  3. 然后遍历这些行,然后遍历制表符分隔的条目,在将值放入excel文件时,将它们分别转换为行和列坐标。

答案 2 :(得分:0)

看起来你最终试图到达这里:

import xlwt

f=open('inputfile.txt')
style0=xlwt.easyxf('font:name Times New Roman,colour black,bold on')
wb=xlwt.Workbook()
ws=wb.add_sheet('Database',cell_overwrite_ok=True)


c=0
for lines in f:
    split = f.split('\t')
    for i,val in enumerate(split):
        ws.write(i,c,val)
        c=c+1

wb.save('Prueba.xls')

这假设ws.write需要一个行索引( 想要验证它),后跟一个列索引,后跟要写入该单元格的值。此代码将inputfile.txt中的每一行放在一个单独的列中。如果您希望输入文件中的每一行都存在于不同的行中,那么您正在寻找此解决方案:

import xlwt

f=open('inputfile.txt')
style0=xlwt.easyxf('font:name Times New Roman,colour black,bold on')
wb=xlwt.Workbook()
ws=wb.add_sheet('Database',cell_overwrite_ok=True)


row_index=0
for lines in f:
    split = f.split('\t')
    for i,val in enumerate(split):
        ws.write(row_index,i,val)
        c=c+1

wb.save('Prueba.xls')