1

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

例如

汽车.dbf

Toyota
Mazda
Kia
Volkswagon

我想输出以下句子:

在这个街区内,街上停着一辆丰田、马自达、起亚和大众汽车。

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

汽车.dbf

Toyota
Mazda

在这个街区内,街上停着一辆丰田和马自达。

汽车.dbf

empty

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

我知道如何执行 if else 语句,但不确定如何在句子中将 dbf 记录作为变量传递。任何人的想法?

使用python 2.7。

提前一千感谢。

4

1 回答 1

0

使用我的 dbf 包

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并且%需要单个项目或项目元组。

于 2013-02-22T22:08:53.090 回答