1

我正在编写一个打开 DBF 文件的 Python 脚本,然后从中创建内容的文本输出(.txt 或 .csv)。

我现在已经设法让它写入输出文件,但我需要替换其中一个数据库字段中的空格字符(这是一个英国汽车注册号,例如我需要“AB09 CDE”输出为“AB09CDE”)但是我一直无法弄清楚如何做到这一点,因为它似乎是嵌套列表。在下面的代码中,该字段是 rec[7]。

if __name__ == '__main__':
 import sys, csv
 from cStringIO import StringIO
 from operator import itemgetter

 # Read a database
 filename = 'DATABASE.DBF'
 if len(sys.argv) == 2:
     filename = sys.argv[1]
 f = open(filename, 'rb')
 db = list(dbfreader(f))
 f.close()
 fieldnames, fieldspecs, records = db[0], db[1], db[2:]

 # Remove some fields that we don't want to use...
 del fieldnames[0:]
 del fieldspecs[0:]
 #Put the relevant data into the temporary table
 records = [rec[7:8] + rec[9:12] + rec[3:4] for rec in records]


 # Create outputfile
 output_file = 'OUTPUT.txt'
 f = open (output_file, 'wb')
 csv.writer(f).writerows(records)

这也在每个输出值的末尾添加了很多空格。我将如何摆脱这些?

我对 Python 还很陌生,因此我们将不胜感激地收到任何指导!

4

3 回答 3

3

问题是您正在使用切片:

>>> L = [1,2,3,4,5,6,7,8,9,10]
>>> L[7]
8
>>> L[7:8]  #NOTE: it's a *list* of a single element!
[8]

要替换rec[7]do 中的空格:

records = [[rec[7].replace(' ', '')] + rec[9:12] + rec[3:4] for rec in records]
于 2013-07-15T14:39:33.897 回答
1
 records = [rec[7].replace(' ', '') + rec[9:12] + rec[3:4] for rec in records]

?

于 2013-07-15T14:40:21.817 回答
1

Python 文档写道: str.replace(old, new[, count]) 返回字符串的副本,其中所有出现的子字符串 old 都替换为 new。如果给定了可选参数 count,则仅替换第一个 count 出现。这个例子证明了这一点:

In [13]: a ="AB09CDE"

In [14]: a.replace(" ", "")
Out[14]: 'AB09CDE'

In [15]: print a
AB09CDE

因此,如果 rec 是字符串字段,则:

records = [rec.replace(" ", "") for rec in records]
于 2013-07-15T14:58:03.400 回答