Python - 读取 Excel 文件并将输出打印到另一个文件
Python - Read Excel file and print output to another file
我有一个包含 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 的帖子。我不确定如何解决这个问题,但如果有人能帮助我解决这个问题,那就太好了!感谢任何形式的帮助 :)
以下脚本应该可以帮助您入门。它使用 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
测试
以下脚本使用 xlrd,它只适用于扩展名为“.xls”的旧 excel 文件。对于 excel 类型为“.xlsx”的文件,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
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。
我有一个包含 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 的帖子。我不确定如何解决这个问题,但如果有人能帮助我解决这个问题,那就太好了!感谢任何形式的帮助 :)
以下脚本应该可以帮助您入门。它使用 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
测试以下脚本使用 xlrd,它只适用于扩展名为“.xls”的旧 excel 文件。对于 excel 类型为“.xlsx”的文件,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
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。