Создайте функцию, которая использует список в качестве аргумента для извлечения строк из CSV - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь передать список в качестве аргумента функции, которая будет извлекать строку из CSV, если она содержит строку в предоставленном списке. Я не могу изменить индекс для элемента A. Он печатает только последний элемент списка!

GAS=[
"SUNOCO",
"CUMBERLAND",
"MOBIL"]
gasLength=len(GAS)
print(gasLength)

def parseData(csvToParse = transactionsCSV, itemA="", itemB=""):
#For Loop to append to CSV
    for row in csvToParse:
        if itemA in row[3]:
            csv_personA.writerow([row[0],row[1],row[2],row[3],row[4],row[5]])
            print(row[3])
            print(itemA)
        elif itemB in row[3]:
            csv_personB.writerow([row[0],row[1],row[2],row[3],row[4],row[5]])

#This Was suggested but still only returns the GAS index of 0
for counter, _ in enumerate(range(gasLength)):
    parseData(csvToParse=transactionsCSV, itemA=GAS[counter], itemB="")



for _ in range(gasLength):
    x = gasLength-1
    parseData(csvToParse=transactionsCSV, itemA=GAS[x], itemB="")


# My first attempt is below!!!
#Get gas purchases

def parseGasStations():
    x = 0
    itemsToCheck = row_count*gasLength
    print(itemsToCheck)
     #while x is less than total of items in the main csv times the number of items in the gas array.
    while x < itemsToCheck:
        a = 0
        y = 0
        #While a is less than the total number of rows in the main 
        while a < row_count: 
            print(GAS[y])
        for _ in range(gasLength):
            parseData(csvToParse=transactionsCSV, itemA=GAS[gasLength-1], itemB="")
            if y != gasLength-1: 
                y += 1
            elif y == gasLength-1:
                y = 0
            a += 1
        x += 1
parseGasStations()

CSV-вывод

Вывод только добавляет станции MOBIL к CSV и не индексирует список, как я думал.

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Благодаря Fluxens я смог понять это!Вот функция, которая принимает список в качестве параметра и индексирует все элементы!


GAS=(
"SUNOCO",
"CUMBERLAND",
"MOBIL",
"BESTWAY",
"AMORE FUEL")
gasLength=len(GAS)

def parseData(csvToParse="", catagory=(), catagorySize=""):
    #For loop to check each row in master csv
    for row in csvToParse:
        #For loop to index through catagory items to look for in each row
        for counter, _ in enumerate(range(catagorySize)):
            if catagory[counter] in row[3]:
                csv_mark.writerow([row[0],row[1],row[2],row[3],row[4],row[5]])
                print(row[3])
                print(catagory)

parseData(csvToParse = transactionsCSV, catagory=GAS, catagorySize=gasLength)
0 голосов
/ 03 июня 2019

Итак, если вы хотите использовать числовой счетчик итераций в вашей итерации, вы можете сделать следующее.

for counter, _ in enumerate(range(gasLength)):
    parseData(csvToParse=transactionsCSV, itemA=GAS[counter], itemB="")

Перечисление возвращает кортеж, содержащий счетчик и сам элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...