将dbf数据传递给句子并使用Python 2.7保存为文本文件

时间:2013-02-22 21:33:51

标签: python python-2.7 dbf

我有一个脚本可以将一些结果导出到dbf文件(dbf是我正在使用的软件的唯一导出选项)。我想使用这些结果(行数会有所不同)将包含结果的句子输出到文件中。

例如

Cars.dbf

Toyota
Mazda
Kia
Volkswagon

我想输出以下句子:

在这附近有一辆停在街上的丰田,马自达,起亚和大众汽车。

如果结果是两个,我不想要逗号:

Cars.dbf

Toyota
Mazda

在这附近有一辆丰田和马自达停在街上。

Cars.dbf

empty

这附近的街道上没有停放的汽车。

我知道if else语句怎么做,但我不确定如何将dbf记录作为变量传递给句子。任何想法?

使用python 2.7。

提前一千谢谢。

1 个答案:

答案 0 :(得分:0)

使用my dbf package

import dbf
table = dbf.Table('Cars', default_data_types={'C':dbf.Char})  # don't want extra spaces
cars = []
table.open()
for record in table:
    cars.append(record[0])   # or cars.append(record.make) if 'make' is the field name

if len(cars) == 1 and cars[0] == 'empty'):
    # print no cars sentence
elif len(cars) == 1:
    # print one car sentence
elif len(cars) == 2:
    # print two car sentence
else:
    # print many car sentence

for record in table循环后,所有名称都在cars列表中。那时它是简单的字符串替换:

# many car case
first = "Within this neighborhood there is a "
last = " parked on the street."
middle = ('%s, ' * (len(cars)-1) + 'and a %s') % tuple(cars)
print first + middle + last+

middle =行对字符串替换有点花哨。每个%s都会被cars中的条目替换,如果您必须拥有cars中与%s相同数量的项目。当然,你想要在最后一项之前加上'和'。所以,如果你有四辆车:

cars = ['Mazda', 'Ford', 'Dodge', 'Yugo']

然后

len(cars) - 1 == 3

所以

'%s, ' * (len(cars)-1) == '%s, %s, %s, '

然后我们添加最后一部分

'%s, ' * (len(cars)-1) + 'and a %s' == '%s, %s, %s, and a %s'

最后,%字符串替换函数看到了

'%s, %s, %s, and a %s' % tuple(cars)

会给我们

 'Mazda, Ford, Dodge, and a Yugo'

注意:我们不得不说tuple(cars)因为carslist%需要单个项目或元组元素。