2015-06-05 49 views
-1

下面的代码的输出加: -如何新列(头)为CSV文件通过命令行参数

import datetime 
import csv 
file_name='sample.txt' 
with open(file_name,'rb') as f:    
    reader = csv.reader(f,delimiter=",")            
    #headers = reader.next() 
    p=[] 
    for row in reader: 

     row[0] = row[0].zfill(6) 
     row[2] = row[2].zfill(6) 
     row[3] = row[3].zfill(6) 
     row[4] = row[4].zfill(6) 
     row[1] = row[1][5:7] + "-" + row[1][8:10] + "-" + row[1][:4] 
     p.append(row[:5]) 
     print p 
with open('names.txt', 'wb') as ofile: 
    writer = csv.writer(ofile) 
    for row in p: 
     writer.writerow(row) 

是以下几点: -

User_ID,--Date,0Num_1,0Num_2,Com_ID 
000101,04-13-2015,000012,000021,001011 
000102,04-03-2014,000001,000007,001002 
000103,06-05-2013,000003,000004,000034 
000104,12-31-2012,000004,000009,001023 
000105,09-09-2011,000009,000005,000104 

我要添加从命令行将新列添加到csv文件。 例如python script_name.py Dept_ID位置将为Comp_ID旁边的Dept_ID和Location创建列。

任何人都可以在这里指导我!

+0

可能重复(http://stackoverflow.com/questions/20347766/pythonically-add-header-to-a-csv-file) –

+0

你会如何填写它? –

+0

对于命令行选项,请查看getopt。 https://docs.python.org/2/library/getopt.html – harandk

回答

2

看到this post这表明类似如下:

header = ['User_ID','--Date','0Num_1','0Num_2','Com_ID'] 
writer = csv.DictWriter(outcsv, fieldnames = header) 
writer.writeheader() 
writer.writerows({col: row} for row, col in zip(header, p)) 

从系统参数使用sys.argv

import sys 

extra_headers = sys.argv 
header.extend(sys.argv) 
n = len(sys.argv) 

writer = csv.DictWriter(outcsv, fieldnames = header) 
writer.writeheader() 

col_fill = '' 
# extend p with two columns of blank data 
writer.writerows({col: row_item} for row in p for row_item,col in zip(row+[col_fill]*n,header)) 

在这里,我的每一行迭代解析额外列,然后我箱子一本字典按顺序向每列分配数据。通知[col_fill]*n这会创建一个等于col_fill的相同项目列表,这些项目将用于填充通过命令行参数解析的附加列。

在这个例子中的命令行参数将被解析为:

$ python script_name.py Dept_ID Location 

,并会创造:

User_ID,--Date,0Num_1,0Num_2,Com_ID,Dept_ID,Location 
000101,04-13-2015,000012,000021,001011,, 
000102,04-03-2014,000001,000007,001002,, 
000103,06-05-2013,000003,000004,000034,, 
000104,12-31-2012,000004,000009,001023,, 
000105,09-09-2011,000009,000005,000104,, 
0

可以使用sys.argv中摆脱命令行参数。

import sys 

print 'Number of arguments:', len(sys.argv), 'arguments.' 
print 'Argument List:', str(sys.argv) 

$ python script_name.py Dept_ID Location 

Number of arguments: 4 arguments. 
Argument List: ['script_name.pyy', 'Dept_ID Locatio'] 

你从命令行参数后,你可以将其添加到您的文件

的[Pythonically添加标题为CSV文件]