python - 从已过滤的 Excel 文件写入 CSV
问题描述
我对使用 Python 非常陌生,但我正在尝试教这条老狗新技巧。
该程序的目标是搜索包含多个工作表的 Excel 工作簿,仅拉出搜索中的行项目,并给出列出单位名称和返回的搜索项目的输出。它当前转到一个文本文件,每个单元都有一个输出,如下所示:
在 PILGRIMS PRD LV OAK (COMPASS-20098) 中,以下物品未经批准或有增加产品成本的风险 说明 品牌 数量 总价 115 POTATO AU GRATIN CLASSIC CASS SYS CLS 3 cs $162.69 135 POTATO PEARL EXCEL SYS CLS 2 cs $123.48 149 HAM切块 0.25 英寸 CUBE FARMLND 1 件装 24.95 美元 150 比萨奶酪圆形 5 块装托尼 1 件装 45.58 美元 154 酱阿尔弗雷多袋装 GLUFR STOUFER 1 件装 47.87 美元
在下面的代码中,我希望能够将输出转到一个 csv 文件(或多个 csv 文件)或一个 excel 文件(它可能是每个单元都是一个列出了搜索查找的工作表)而不是文本文件具有相同的输出信息(即单位名称和列中的搜索项)。
import os
import openpyxl
import csv
sheet_data = []
wb = openpyxl.load_workbook('ProductFrequency 092719_021020 by Unit.xlsx')
ws = wb.active
recordDict = {}
for i in range(9, ws.max_row+1):
itemNum=ws['A'+str(i)].value
description=ws['B'+str(i)].value
quantity=ws['H'+str(i)].value
recordDict.setdefault(itemNum,{})
recordDict[itemNum][description] = quantity
#print(itemNum, description, quantity)
import pandas as pd
import numpy as np
pd.set_option('display.max_rows', 100000)
resultsFile = open('Results_UNIT_092719_021020.txt', 'w')
resultsFile.close()
c = csv.writer(open("Results_UNIT_092719_021020.csv", 'w'))
count=0
while count < 78:
df = pd.read_excel('ProductFrequency 092719_021020 by Unit.xlsx', sheet_name=count, usecols=[0,1,2,7,8,9])
unitName = df.iloc[0,0]
df = pd.read_excel('ProductFrequency 092719_021020 by Unit.xlsx', sheet_name=count, skiprows=8, usecols=[0,1,2,7])
df = df.fillna(value="")
new_df = df.loc[(df['Dist #'].str.contains('4014320')) |(df['Description'].str.contains('ALFREDO')) | (df['Description'].str.contains('CARNITAS')) | (df['Description'].str.contains('PORK CHOP')) | (df['Brand'].str.contains('AUSTBLU')) | (df['Brand'].str.contains('CMBLRSV')) | (df['Description'].str.contains('GRAVY SAUSAGE COUNTRY RTU')) | (df['Description'].str.contains('SCRATCH RDY')) | (df['Description'].str.contains('BEEF ROAST POT')) | (df['Description'].str.contains('SALISBURY')) | (df['Description'].str.contains('FC')) | (df['Description'].str.contains('BRAISED')) | (df['Description'].str.contains('TROPICAL')) | (df['Brand'].str.contains('STCLAIR') | (df['Brand'].str.contains('AUBONPN')))]
resultsFile = open('Results_UNIT_092719_021020.txt', 'a')
resultsFile.write('In '+unitName+' the following items are not approved \n')
resultsFile.write(str(new_df)+'\n')
resultsFile.write('\n')
resultsFile.write('\n')
resultsFile.close()
print('In '+unitName+' the following items are not approved'+'\n\n')
print(new_df)
print('\n')
count +=1
解决方案
首先:CSV(逗号分隔值)没有任何“真实”格式。因此,没有任何类型的过滤(或“隐藏”数据),也没有“表格”。它实际上只是简单的数据,中间有逗号,例如
"
a,b,c
d,e,f
....
"
如果这对您的问题没有帮助,请更详细地解释您要实现的目标(也许给出所需输出的示例)。
推荐阅读
- java - 表 'DBNAME.hibernate_sequence' 不存在用于继承映射
- python - auth_registrations_mapping 错误:在具有管理员访问权限的 cmd 上 pip install twilio 时无法创建
- spring-boot - 如何添加多个消费者组?
- java - 使用 Lettuce 时重试 Redis 命令是否安全?
- php - 如何通过大摇大摆的发布请求发送原始正文?
- formset - 如何在表单向导的同一模板中创建表单审核页面
- java - 无法在标记为 @SpringBootTest 的组件测试中加载 @Configuration 类
- python - 如何知道在pygame中空格键是否按下超过2秒
- elasticsearch - 如何知道 Elastic Search Hits 的来源
- docker - Jenkins 和 nginx 使用 docker 端口 50000 配置