Python从文本文件中的定义替换单词

时间:2012-07-20 20:27:51

标签: python file

我有一个为cobol编写的旧informix数据库。所有字段都在代码中,所以我的SQL查询看起来像。

SELECT uu00012 FROM uu0001;

这很难读。

我有一个包含字段定义的文本文件,如

uu00012 client
uu00013 date
uu00014 f_name
uu00015 l_name

我想换掉更多英文名称的代码。在它上面运行一个python脚本,并保存一个英文名称的文件。

最好的方法是什么?

5 个答案:

答案 0 :(得分:1)

如果每一篇文章都是一个单独的词,re.sub绝对是这里的方式:

#create a mapping of old vars to new vars.
with open('definitions') as f:
    d = dict( [x.split() for x in f] )

def my_replace(match):
    #if the match is in the dictionary, replace it, otherwise, return the match unchanged.
    return d.get( match.group(), match.group() )

with open('inquiry') as f:
    for line in f:
        print re.sub( r'\w+', my_replace, line ) 

答案 1 :(得分:0)

从概念上讲,

我可能会首先建立编码的映射 - >英语(记忆中或o。

然后,对于地图中的每个编码,扫描您的文件并替换为映射英文等效的代码。

答案 2 :(得分:0)

infile = open('filename.txt','r')
namelist = []
for each in infile.readlines():
    namelist.append((each.split(' ')[0],each.split(' ')[1]))

这将为您提供键值对的列表

我不知道你想对那里的结果做什么,但你需要更明确

答案 3 :(得分:0)

dictionary = '''uu00012 client
uu00013 date
uu00014 f_name
uu00015 l_name'''

dictionary = dict(map(lambda x: (x[1], x[0]), [x.split() for x in dictionary.split('\n')]))

def process_sql(sql, d):
    for k, v in d.items():
        sql = sql.replace(k, v)
    return sql

sql = process_sql('SELECT f_name FROM client;', dictionary)

构建dictionary

{'date': 'uu00013', 'l_name': 'uu00015', 'f_name': 'uu00014', 'client': 'uu00012'}

然后运行您的SQL并用编码的东西替换人类可读的值。结果是:

SELECT uu00014 FROM uu00012;

答案 4 :(得分:0)

import re

f = open("dictfile.txt")

d = {}
for mapping in f.readlines():
    l, r = mapping.split(" ")
    d[re.compile(l)] = r.strip("\n")

sql = open("orig.sql")
out = file("translated.sql", "w")

for line in sql.readlines():
    for r in d.keys():
        line = r.sub(d[r], line)
    out.write(line)