简体   繁体   中英

csv row and column fetch

So working on a program in Python 3.3.2. New to it all, but I've been getting through it. I have an app that I made that will take 5 inputs. 3 of those inputs are comboboxs, two are entry widgets. I have then created a button event that will save those 5 inputs into a text file, and a csv file. Opening each file everything looks proper. For example saved info would look like this:

Brad M.,Mike K.,Danny,Iconnoshper,Strong Wolf Lodge

I then followed a csv demo and copied this...

import csv

ifile  = open('myTestfile.csv', "r")
reader = csv.reader(ifile)

rownum = 0
for row in reader:
# Save header row.
    if rownum == 0:
        header = row
    else:
        colnum = 0
        for col in row:
            print('%-15s: %s' % (header[colnum], col))
            colnum += 1

    rownum += 1

ifile.close()

and that ends up printing beautifully as:

rTech: Brad M.
pTech: Mike K.
cTech: Danny
proNam: ohhh
jobNam: Yeah
rTech: Damien
pTech: Aaron

so on and so on. What I'm trying to figure out is if I've named my headers via

if rownum == 0:
        header = row

is there a way to pull a specific row / col combo and print what is held there??

I have figured out that I could after the program ran do

print(col)

or

print(col[0:10]

and I am able to print the last col printed, or the letters from the last printed col. But I can't go any farther back than that last printed col.

My ultimate goal is to be able to assign variables so I could in turn have a label in another program get it's information from the csv file.

rTech for job is???
look in Jobs csv at row 1, column 1, and return value for rTech

do I need to create a dictionary that is loaded with the information then call the dictionary?? Thanks for any guidance


Thanks for the direction. So been trying a few different things one of which Im really liking is the following...

import csv

labels = ['rTech', 'pTech', 'cTech', 'productionName', 'jobName']
fn = 'my file.csv'

cameraTech = 'Danny'
f = open(fn, 'r')

reader = csv.DictReader(f, labels)

jobInformation = [(item["productionName"],
               item["jobName"],
               item["pTech"],
               item["rTech"]) for item in reader if \
                item['cTech'] == cameraTech]

f.close()

print ("Camera Tech: %s\n" % (cameraTech))
print ("\n".join(["Production Name: %s \nJob Name: %s \nPrep Tech: %s \nRental Agent:      %s\n" % (item) for item in jobInformation]))

That shows me that I could create a variable through cameraTech and as long as that matched what was loaded into the reader that holds the csv file and that if cTech column had a match for cameraTech then it would fill in the proper information. 95% there WOOOOOO..

So now what I'm curious about is calling each item. The plan is in a window I have a listbox that is populated with items from a .txt file with "productionName" and "jobName". When I click on one of those items in the listbox a new window opens up and the matching information from the .csv file is then filled into the appropriate labels.

Thoughts??? Thanks again :)

I think that reading the CSV file into a dictionary might be a working solution for your problem.

The Python CSV package has built-in support for reading CSV files into a Python dictionary using DictReader, have a look at the documentation here: http://docs.python.org/2/library/csv.html#csv.DictReader

Here is an (untested) example using DictReader that reads the CSV file into a Python dictionary and prints the contents of the first row:

import csv
csv_data = csv.DictReader(open("myTestfile.csv"))

print(csv_data[0])

Okay so I was able to put this together after seeing the following ( https://gist.github.com/zstumgoren/911615 )

That showed me how to give each header a variable I could call. From there I could then create a function that would allow for certain variables to be called and compared and if that matched I would be able to see certain data needed. So the example I made to show myself it could be done is as follows:

import csv

source_file = open('jobList.csv', 'r')

for line in csv.DictReader(source_file, delimiter=','):
    pTech= line['pTech']
    cTech= line['cTech']
    rAgent= line['rTech']
    prodName= line['productionName']
    jobName= line['jobName']

    if prodName == 'another':
        print(pTech, cTech, rAgent, jobName)

However I just noticed something, while my .csv file has one line this works great!!!! But, creating my proper .csv file, I am only able to print information from the last line read. Grrrrr.... Getting closer though.... I'm still searching but if someone understands my issue, would love some light.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM