使用列表替换CSV文件Python中的项目

时间:2015-01-11 20:37:09

标签: python list csv dictionary replace

我有一个如下列表:

['data-data analysis','word or words-phrase','rank-ranking']

和一个常规的CSV文件,可以在其中任何位置包含“ - ”之前的单词(任何列)。我想用“ - ”之后的单词替换它们。示例CSV文件可能如下所示:

h1,h2,h3
data of database,a,v
gg,word or words/word,gdg
asd,r,rank

我非常感谢任何帮助。

期望的输出:

h1,h2,h3
data analysis of database,a,v
gg,phrase/word,gdg
asd,r,ranking

1 个答案:

答案 0 :(得分:1)

这有一些诡计,因此您在替换data analysis of data analysisbase时无法获得data

input.csv

h1,h2,h3
data of database,a,v
gg,word or words/word,gdg
asd,r,rank

Python代码

#!python2
import csv
import re

# This builds a dictionary of key/value replacements.
# It wraps the key in word breaks to handle not replacing
# "database" when the key is "data".
L = ['data-data analysis','word or words-phrase','rank-ranking']
pairs = [w.split('-') for w in L]
replacements = {r'\b' + re.escape(k) + r'\b':v for k,v in pairs}

# Files should be opened in binary mode for use with csv module.
with open('input.csv','rb') as inp:
    with open('output.csv','wb') as outp:

        # wrap the file streams in csv reader and csv writer objects.
        r = csv.reader(inp)
        w = csv.writer(outp)

        for line in r:
            for i,item in enumerate(line):
                for k,v in replacements.items():
                    item = re.sub(k,v,item)
                line[i] = item
            w.writerow(line)

output.csv

h1,h2,h3
data analysis of database,a,v
gg,phrase/word,gdg
asd,r,ranking