使用python读取特定列

时间:2014-08-19 19:08:03

标签: python

我有一个像这样的文件

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 = 00010101prefix = 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']

原始文件位于http://pastebin.com/QFvLwcHu

1 个答案:

答案 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 nameslist comprehension的一部分,使得Python为%元组中的每个元素评估一次names运算符。