Запись в CSV из файла Excel, который был отфильтрован - PullRequest
1 голос
/ 10 февраля 2020

Я ОЧЕНЬ новичок в использовании Python, но пытаюсь научить эту старую собаку новым трюкам.

Целью этой программы является поиск в книге Excel, содержащей несколько листов, выборка только позиций в поиске и выдача вывода, в котором указаны имя устройства и возвращенные элементы поиска. В настоящее время он переходит к текстовому файлу с выводом для каждой единицы, как показано ниже:

В PILGRIMS PRD LV OAK (COMPASS-20098) следующие позиции не утверждены или представляют риск увеличения стоимости продукта Описание Количество бренда Общая цена 115 КАРТОФЕЛЬ АУ ГРАТИН КЛАССИ C CASS SYS CLS 3 cs $ 162,69 135 КАРТОФЕЛЬ ЖЕМЧУГ EXCEL SYS CLS 2 cs $ 123,48 149 ХАМ НАЙДЕН .25 В КУБЕ ФАРЛЬМНД 1 Cs $ 24,95 150 ПИЦЦА СЫР ТУРЕЛЬ 5 ФРУКТОВ ГОСУДАРСТВЕННЫХ УЧАСТКОВ 5 ФУТБОЛЬНЫХ КАРТИНГ 5 ФРАНЦУЗСКИЙ 2 ФУТБОЛЬНЫЙ ФУТБОЛЬ 5 ФРУКТОВ ФУТБОЛЬСКОГО УЧАСТИЯ В ФУТБОЛЕ 1 5 ФУТ. 1 cs $ 47,87

В следующем коде я хотел бы иметь возможность иметь вывод go в файл 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

1 Ответ

0 голосов
/ 12 февраля 2020

Прежде всего: CSV (значения через запятую) не имеют никакого «реального» форматирования. Следовательно, нет никакой фильтрации (или «скрытых» данных) любого рода, а также нет «листов». На самом деле это просто обычные данные с запятыми между ними, например

"
a,b,c
d,e,f
....
"

Если это не поможет решить вашу проблему, пожалуйста, объясните, чего вы пытаетесь достичь, более подробно (возможно, приведите пример желаемого результата) .

...