0

次のような csv ファイルがあるとします。

(a,3,,,,)
(b,,,,,)
(c,2,,,,)
(d,,,,,)
(e,,,,,)
(f,1,,,,)
(g,,,,,)

どのアルファベット (つまり、a、b、c、d、e、f、g) が列 (ここでは列 1 としましょう) に値を持っているかを調べようとしています。
私が書いたコードはここにあります:

set3 = set([n[column] for n in new_marks])

if set3 != '':

      print
      print '{0} is not empty'.format(list(set3))

このコードは、アルファベットではなく列1の値のみを出力します...

誰かがこの問題を理解するのを手伝ってくれますか?

ありがとうございました

4

7 に答える 7

2

私は次のようなことをします:

import csv

def strip_bits(obj):
    for el in obj:
        yield el[1:-2]

with open('/home/jon/testfile.csv') as fin:
    tempin = strip_bits(fin)
    csvin = csv.reader(tempin)
    for row in csvin:
        if any(row[1:]):
            print row[0] # or do whatever
于 2012-08-26T13:22:11.573 に答える
1

解決策なしcsv:

with open('data.txt') as f:
    for x in f:
        x=x.strip().strip('()')
        spl=x.split(',')
        if spl[0] in ('a','b','c','d','e','f','g') and spl[1]!='':  #replace spl[1] with
                          # any other column if you want to find value in some other column
            print ("{0} is not empty".format(spl[0]))

出力:

a is not empty
c is not empty
f is not empty
于 2012-08-26T11:31:40.233 に答える
0

CSV は純粋なカンマ区切りのテキスト ファイルに他なりませんね。

with open("/path/to/myfile.csv") as f:
    for line in f:
        line_chars = line.strip()[1:-1].split(",")
        k, v= line_chars[0], "".join(line_chars[1:])
        if v: print k, v
于 2012-08-26T13:46:42.873 に答える
0

このコードは、あなたの質問から私が理解していることのほとんどを行います。

何を「値」として定義するのかわかりません。ここでは、複数の列を持つ任意の行です。しかし、このコードは簡単に変更できます。

#holds the rows from the file
rows = []
#opens and reads each row of the file (CSVFILE = full file location)
with open(CSVFILE, "r") as CSV_read:
    next(CSV_read) # removes headers/colum names (if you dont have any - remove this line)
    for line in CSV_read:
        #cleans and splits the line into colums
        vals = line.strip("\r\n").strip("\n").split(",")
        #adds the line to the list of rows
        rows.append(vals)

#holds the alphabet (first colum value) of each row that has more values/cells
have_value = []
#goes over each row in the rows
for row in rows:
    #if there are any values after the initial 'alphabet'
    if len(row) > 1:
        # add to the list of things with values.
        have_value.append(row[0])
于 2012-08-26T11:32:51.440 に答える
0

これはどう?

s = """a,3,,,,
b,,,,,
c,2,,,,
d,,,,,
e,,,,,
f,1,,,,
g,,,,,"""
buf = StringIO(s)
d = {}
for row in csv.reader(buf,delimiter=','):
  d[row[0]] = row[1:]

looking_for = 2

for alpha,items in d.iteritems():
   try:
       if items[looking_for-1] == '1':
           print 'Letter %s has value in column %s' % (alpha,looking_for)
   except IndexError:
       print "List doesn't contain %s columns!" % looking_for
于 2012-08-26T11:33:19.960 に答える
0
d = dict((n[0], n[column]) for n in new_marks)
if d:
    print
    print '{0} is not empty'.format(d.keys())
于 2012-08-26T11:27:37.633 に答える
0

最初の行を変更します。

set3 = set([n[0] for n in new_marks if n[column] is not None])
于 2012-08-26T11:28:27.383 に答える