我有一个像这样的文件
SEQ_NUM|ICS_ORIG_STRT_DT|EDW_FIRST_OUT_IFP_DT|CURR_DT|DEV_GE_NUM_DAYS|DEV_LE_NUM_DAYS|FILENAME|CAMPAIGN_NAME_DESC| CAMPAIGN_WAVE|MARKET_SEGMENT|CAMPAIGN_NAME|CAMPAIGN_WAVE_RUN|EFFORT_TYPE|EFFORT_NUM|UU_ID|PRINT_ACCT_NUM|PRINT_PUB_CD|PREFIX|SUFFIX|FIRST_NAME|LAST_NAME|EMAIL|PHONE_NUM|BUS_PHONE|CO_NAME|STREET_NUM|ADDR|ADDR2|CITY|STATE_PROVINCE|ZIP_POSTAL|ZIP4|TRACK_CD|VANITY_URL|BILL_FORM|LETTER_TEXT|OUTER
130|20140401|00010101|20140728|85||Apr14WSJ_CNYR_NOEMAIL_CAP_TM_20140728.txt|Apr14WSJ_CNYR_NOEMAIL_CAP_TM|WSJ_CNYR_NOEMAIL_CAP_TM|CNYR|WSJ_CNYR_NOEMAIL_CAP|Apr14|TM|||032714296269|J|||ARTHUR|MURPHY||9784255147|||46|LANTERN###WAY||SHIRLEY|MA|01464|2136|aaqecw0c||||
我想获得PRINT_PUB_CODE =130,PRINT_ACCT_NUM= 20140401 CO_NAME = 00010101
和prefix = 20140728
等等。
我是python的新手,并尝试了这段代码和其他代码,但结果就像
130
20140401
None
aaqecw0c
请让我知道我在哪里做错了。我能做些什么来解决这个问题。 代码是:
#!/usr/bin/env python
import csv
csv.register_dialect('piper', delimiter='|', quoting=csv.QUOTE_NONE)
with open('temp1.txt','rb') as csvfile:
for row in csv.DictReader(csvfile, dialect='piper'):
print row['PRINT_PUB_CODE']
print row['PRINT_ACCT_NUM']
print row['CO_NAME']
print row['PREFIX']
答案 0 :(得分:0)
print
正在写出你告诉它的内容,即值本身。如果你想要名字/价值对,你需要自己安排格式化。
尝试使用此代替现有的打印语句:
names = ('PRINT_PUB_CODE', 'PRINT_ACCT_NUM', 'CO_NAME', 'PREFIX')
print(", ".join("%s=%r" % (n, row[n]) for n in names))
以上代码如何运作:
", ".join(sequence)
获取一系列字符串,并在每个值之间将", "
连接在一起。%
是string formatting operator,它接受左侧的字符串,并使用右侧元组中的格式化值替换%s
和%r
等模式%s
是字符串的格式代码,用于=
符号前面的名称。%r
是""的字符串表示的格式代码或repr,用于将row
中的值转换为字符串。for n in names
是list comprehension的一部分,使得Python为%
元组中的每个元素评估一次names
运算符。