python csv头文件

boc*_*cca 17 python csv

我有一组csv标题,我试图与上传匹配.它并没有真正起作用.并非所有标头都是必需的 - 我只需匹配文件中的内容即可.

reader = csv.DictReader(open(PathFile))
headers = reader.fieldnames
for header in sorted(set(headers)):
     if (header == 'ip') or (header == 'IP'):
         print  "IP found in Header"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,找不到IP.

for row in reader:
     if row.get('IP'):
         print  "IP found in Row"
Run Code Online (Sandbox Code Playgroud)

它再也找不到了.我在这个网站上搜索过 - 有:

IP = row.get('IP', None)
Run Code Online (Sandbox Code Playgroud)

那也行不通.

这是我用来测试的文件:

Email, IP, Name, City, State, zip, country, garbage
ghfddgf@gfgs.com, 34.4.34.34,Mr GH, chicago, il ,60601, us,erw ewr 
5t4g@fdsf.com, 34.45.23.34, Mr 5t,NY,NY,10101, us, er
Run Code Online (Sandbox Code Playgroud)

ber*_*nie 12

根据您的编辑,您需要跳过逗号后的初始空格.

这应该这样做:

>>> reader = csv.DictReader(open(PathFile),skipinitialspace=True)
Run Code Online (Sandbox Code Playgroud)


Anu*_*yal 7

我不确定你想要实现什么,但如果你只是想知道某些列是否为CSV,并且你确定所有行都有相同的列,并且你想使用dict reader使用这个

s="""col1,col2,col3
ok,ok,ok
hmm,hmm,hmm
cool,cool,cool"""

import csv

reader = csv.DictReader(s.split("\n"))
print reader.fieldnames
for row in reader:
    for colName in ['col3', 'col4']:
        print "found %s %s"%(colName, colName in row)
    break
Run Code Online (Sandbox Code Playgroud)

它输出

found col3 True
found col4 False
Run Code Online (Sandbox Code Playgroud)

或类似的东西也会起作用

reader = csv.reader(s.split("\n"))
columns = reader.next()
for colName in ['col3', 'col4']:
    print "found %s %s"%(colName, colName in columns)
Run Code Online (Sandbox Code Playgroud)