Python - 读取Excel文件并将输出打印到另一个文件

时间:2015-07-21 05:51:29

标签: python string excel

我有一个包含2列的excel文件。左列中有一些标签按日期排序。对于每个日期,标签列表与右侧的某些值一起显示。我需要阅读每个日期,找到一些特定的标签并相应地打印这些值。我已经在原始文件中发布了一段摘录,以便您了解它的外观。

Row Label 1    Row Label 2
7/21/2015      123
Label 1        10.5
Label 2        20.6
[.....]        15
Label 5        25.9
Label 6        30.5
[.....]        544
7/22/2015      456
Label 1        15.8
Label 2        52.8
[.....]        87
Label 5        99
Label 6        55
Goes on....

现在您可以看到,我需要先找到日期,然后在右栏中仅打印标签1,2和6以及它们的值。这些标签针对每个日期重复使用不同的值。 excel有这类文本的1000行,我需要打印每个日期,然后是这些标签及其各自的值。

输出应该是这样的。

7/21/2015
Label 1       10.5
Label 2       20.6
Label 6       30.5

我对python很新,我看到一些使用XLRD的帖子。我不确定如何处理这个问题,但如果有人可以帮我解决这个问题,那就太好了!任何形式的帮助表示赞赏:)

3 个答案:

答案 0 :(得分:1)

以下脚本可以帮助您入门。它使用openpyxl库来读取Excel电子表格。

import openpyxl 

wb = openpyxl.Workbook()
wb = openpyxl.load_workbook(filename='input.xlsx')
ws = wb.active

for row in range(2, ws.get_highest_row() + 1):
    row_label_1 = ws['A%d' % row].value
    row_label_2 = ws['B%d' % row].value

    if row_label_1.find("/") != -1: # Simple test for date
        print row_label_1
    elif row_label_1 in ["Label 1","Label 2","Label 6"]:
        print "%-20s  %s" % (row_label_1, row_label_2)

使用Python 2.7进行测试

答案 1 :(得分:1)

以下脚本使用的xlrd仅适用于扩展名为“.xls”的旧excel文件。对于'.xlsx'类型的excel文件,openpyxl将起作用。

以下示例假设第一列中的所有数据都是TEXT数据类型。否则可以修改以下细胞数据类型。

使用python 2.7进行测试

import xlrd


header_column = 0
value_column = 1
accepted_labels = ['Label 1', 'Label 2', 'Label 6']
output = {}
output_child = {}

with xlrd.open_workbook("C:\\temp\\book1.xls") as work_book:
    work_sheet = work_book.sheet_by_index(0)

    num_rows = work_sheet.nrows - 1
    current_row = 0
    # loop through rows
    while current_row < num_rows:
        if 'label' not in work_sheet.cell_value(current_row, header_column).lower():
            date_header_value = work_sheet.cell_value(current_row, header_column)
            current_row += 1

            while 'label' in work_sheet.cell_value(current_row, header_column).lower() and current_row < num_rows:
                if work_sheet.cell_value(current_row, header_column) in accepted_labels:
                    output_child[work_sheet.cell_value(current_row, header_column)] = work_sheet.cell_value(current_row, value_column)

                current_row += 1

            output[date_header_value] = output_child
            current_row -= 1

        current_row += 1
print output

答案 2 :(得分:1)

C:>pip install pandas

安装pandas(python数据分析库)之后

import pandas as pd

df = pd.read_excel(filename, sheetname, skiprows=[0, 1], header=None, index_col=0)
df.index.name = '7/21/2015'
df.columns = ['Data']
writer = pd.ExcelWriter('result.xlsx', datetime_format='yyyy-mm-dd')
df.to_excel(writer)

如果你想处理xls,csv和许多其他类型的数据集文件,我强烈推荐pandas。