2012-01-16 64 views
0

我有多个.csv文件,我用python编程将它们合并到单个.csv文件中。替换python中的列的内容

现在我需要自动化使用python替换.csv文件中一列的内容。我也可以使用记事本打开.csv文件并替换列的内容,但文件非常庞大,需要很长时间。

Name       ID            class Num 
"kanika",""University ISD_po.log";" University  /projects/asd/new/high/sde"","MBA","12" 
"Ambika",""University ISD_po.log";" University  /projects/asd/new/high/sde"","MS","13" 

在上面,我需要替换ID列的内容。 ID列中的新内容应该是“输入”。

此Id列包含2个双引号,并且还有一些额外的空格。而其他专栏只有一个双引号。

有没有办法在python中做到这一点?

组合多个.csv档案来,代码:

fout=open("out.csv","a") 
for line in open("sh1.csv"): 
    fout.write(line) 
for num in range(2,21): 
    f=open("sh"+str(num)+".csv") 
    f.next() 
    for line in f: 
     fout.write(line) 
    f.close() 
fout.close() 
+0

请阅读:http://docs.python.org/library/csv.html – utdemir 2012-01-16 20:36:57

+4

这不是一个csv文件。逗号在哪里? – geoffspear 2012-01-16 20:40:47

+0

@Wooble制表符分隔的csv也许? – 2012-01-16 20:52:16

回答

4

正如其他人已经指出的那样,通常使用csv模块从Python读取/写入CSv文件。

但是,如果您提到的文件与您发布的文件类似,则格式不正确,并且python的CSV将无法正确处理 - (您想要的列的双引号使用不当更改)。

因此,这是值得治疗您的文件为文本文件,并在那里的变化:

with open("myfile.csv") as input_file: 
    with open("output.csv", "wt") as output: 
     output.write(input_file.readline()) 
     for line in input_file: 
      parts = line.split('""') 
      id = parts.split('"')[-1] 
      output.write(parts[0] + id + parts[2]) 
+2

+1关于格式错误的csv的说明。 – 2012-01-16 20:51:41

+0

我试了一下代码,但遇到了错误。 output.write(INPUT_FILE。readline())---------- IOError:文件未打开写入 – kanika 2012-01-16 21:39:32

+0

代码应该有open(“output.csv”,“w”)'。 – MRAB 2012-01-16 22:12:41

2

尝试Python的csv模块读取和写入的CSV文件。

+0

但我如何更换内容? – kanika 2012-01-16 21:00:15

+0

只需从输入文件中读取原始数据,并将修改后的数据一次一行地写入输出文件。 – MRAB 2012-01-16 21:07:59

+0

-0。 OP可能无法处理这样的通用指令。 – 2012-01-16 21:18:22

0

你可以使用正则表达式来删除它:

In [3]: re.sub(r'""Uni-\s*"([0-9]+)""', r'\1', '""Uni- "38447484""', flags=re.I) 
Out[3]: '38447484' 
0

你只是想删除“”单向和“后面有一个空格

改变你的代码

for line in f: 
    line=line.replace('""Uni-','').replace('" ','') 
    fout.write(line) 

你得到例如

kanika“38447484”MBA