2014-08-29 104 views
-1

我的代码从csv文件中提取数据。我想为它添加一个标题。我很困惑把print语句放在哪里,所以它会在文件的开头(作为头文件)。简单的Python语法

import csv 
import StringIO 

f = open('/home/unica/app/Affinium/Campaign/partitions/partition1/scripts/runscripts/campaigns/cnyr/dev/output/CNYR_DM_TM_CAMPAIGN_WAVES.csv', 'r') 

try: 
reader = csv.reader(f, delimiter='|', quotechar='"') 
for row in reader: 
    if row[16] == "" and row[5].find('_NOEMAIL_'): 
     if row[6]== 'DM': 
      print( row[17]+'|'+row[16]+'|'+row[25]+'|'+row[18]+'|'+row[20]+'|'+row[21]+'|'+row[19]+'|'+row[26]+'|'+row[27]+'|'+row[28]+'|'+row[29]+'|'+row[30]+'|'+row[31]+'|'+row[32]+'|'+row[8]+'|'+row[36]+'|'+row[35]+'|'+row[37]+'|'+row[34]) 

有多个if语句,我想标题,我以后把它如果和打印这我得到了rows.The结果之前,每个case.So之前

PRINT_PUB_CODE,PRINT_ACCT_NUM,... 
,J,8,,NUSRALA,,EDWARD... 
PRINT_PUB_CODE,PRINT_ACCT_NUM,... 
,J,614,,BACAL,,LEON... 

所以我肯定没有要求这一点。看来它是每一行searchng并返回每次它循环。任何想法如何解决这个问题。

+4

Erm,在开始处理文件之前? – 2014-08-29 18:49:32

+2

小实验如何?尝试在不同的地方添加一个打印语句,并查看哪一个工作。 – 2014-08-29 18:49:37

+0

我试着添加后导入string.and我也试过如果statement.But不能看到它。 – Rajarshi 2014-08-29 18:51:37

回答

0
  1. 请缩进代码try:后,使工作方案;)

  2. 打印你的标题行应该是一个包含行try:

  3. 我假定你想之前天时地利人和要以表格方式打印的数据,即整齐排列,这样您的+'|'+形成垂直线。请对此进行调查string.format方法。完成后,我假设你的代码看起来像print("{0:<30s}|...".format(row[17],...))。请check the manual这是如何工作的。

  4. 您的程序不会以任何方式“编辑”csv,只是整齐地打印其内容。如果您希望过滤并重新排列该文件中的字段,可以考虑使用awk

+0

是的,你是对的它是一个管状的方式,其中数据的长度是可变的。但问题是我把尝试之前和之后的打印语句,但仍然没有得到任何标题在o/p.maybe因为文件本身是巨大的,所以我不能在腻子屏幕上滚动。你能告诉我一个方法吗? – Rajarshi 2014-08-29 19:51:55

+0

重要的是为什么默认的O/P从CSV文件中携带第一行 – Rajarshi 2014-08-29 20:00:39

+0

您可以使用操作系统工具进行长时间的输出浏览。假设你的程序在一个名为'x.py'的文件中,你可以将输出管道输出为'more'或'less':'python3 x.py | less'。您也可以考虑添加一个小计数器,然后重复标题行,例如,打印30行的exery。 – flaschbier 2014-08-29 21:57:18