使用Python替换CSV文件中的数据
这是新的输入文件格式。我需要用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列的新内容改成“input”。
这个ID列是用两个双引号包围的,还有一些多余的空格。而其他列则只有一个双引号。
有没有什么方法可以用Python来实现这个呢?
2 个回答
14
你可以在Python中使用csv模块来实现这个功能。
csv.reader会把每一行的数据以字符串列表的形式返回。然后你可以用csv.writer来逐行写入数据,并在这个过程中修改ID这一列,不过这样会生成一个新文件。
所以:
import csv
reader = csv.reader(open('file.csv', 'rb'))
writer = csv.writer(open('outfile.csv','wb'))
for row in reader:
writer.writerow([row[0], "input", row[2], row[3]])
4
逐行读取 .csv 文件,按照 ,
进行分割,然后把第二列的内容替换成 "input"。在这个过程中,把修改后的内容写入一个不同的文件:
f = open('mycsv.csv','rb')
fo = open('out.csv','wb')
# go through each line of the file
for line in f:
bits = line.split(',')
# change second column
bits[1] = '"input"'
# join it back together and write it out
fo.write( ','.join(bits) )
f.close()
fo.close()
如果你愿意,可以把这个新文件重命名为原来的文件名,以此来替换掉原文件。