我有一个脚本可以将一些结果导出到dbf文件(dbf是我正在使用的软件的唯一导出选项)。我想使用这些结果(行数会有所不同)将包含结果的句子输出到文件中。
例如
Cars.dbf
Toyota
Mazda
Kia
Volkswagon
我想输出以下句子:
在这附近有一辆停在街上的丰田,马自达,起亚和大众汽车。
如果结果是两个,我不想要逗号:
Cars.dbf
Toyota
Mazda
在这附近有一辆丰田和马自达停在街上。
Cars.dbf
empty
这附近的街道上没有停放的汽车。
我知道if else语句怎么做,但我不确定如何将dbf记录作为变量传递给句子。任何想法?
使用python 2.7。
提前一千谢谢。
答案 0 :(得分:0)
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)
因为cars
是list
而%
需要单个项目或元组元素。