如何从Excel中读取excel表中的相同数据到文本文件

时间:2014-09-09 04:15:10

标签: python python-2.7 xlrd xlwt

这段代码实际上工作正常,但显示的输出不同,因为excel表存在于某些值中,如int,float但在运行脚本后输出显示如下所示。我不需要带有该值的.0。我想要输入中存在的确切值。

  Rows  Column  2   6
   a    cd  21
   b    cd  11  4
   c    cd  22  3
   s    cd  4.1 2
   e    cd  4   1

这是显示错误值的代码

import xlrd
import xlwt
workbook=xlrd.open_workbook("xxx.xls")
sh=workbook.sheet_by_index(0)
print sh.nrows
print sh.ncols
n=0
i=0
file=open("xx.txt","w")

for n in range(sh.nrows):
    for i in range(sh.ncols):
        data =sh.cell_value(n,i)
        print  data,
        file.write(str(data)+" ")
    print 
    file.write("\n")

请帮我解决这个问题。我需要的是excel中应该存在的任何东西。 这是上面代码的输出

1 个答案:

答案 0 :(得分:0)

Excel将所有数字视为浮动。因此xlrd将所有这些作为浮点数读取并按原样提供。

一个简单的解决方法是检查cell是否有float数据类型&没有浮动值,然后将其转换为int类型。

if isinstance(cell, float) and cell.is_integer():
    cell = int(cell)

所以,你的代码会变成这样的东西。

import xlrd
workbook = xlrd.open_workbook('data.xls')
worksheet = workbook.sheet_by_name('Sheet1')
num_rows = worksheet.nrows 
num_cells = worksheet.ncols 
curr_row = -1

with open("xxx.txt", "w") as fh:
    for row in range(num_rows):
        for column in range(num_cells):
            data = worksheet.cell_value(row, column)
            if isinstance(data, float) and data.is_integer():
                data = int(data)
        fh.write(str(data) + " ")
    fh.write("\n")

输出将是:

Rows Column 34.5 6
a cd 54 5
b cd 22.3 4
c cd 56 3
s cd 677.1 2
e cd 32 1

注意:如果您的输入文件包含6.0等浮动数字,默认情况下它们将转换为6