问题描述:

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.

相关阅读:
Top