我正在开发一个Python脚本,它打开一个DBF文件,然后从中创建内容的文本输出(.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的新手,所以任何指导都会感激不尽!
答案 0 :(得分: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]
中的空格:
records = [[rec[7].replace(' ', '')] + rec[9:12] + rec[3:4] for rec in records]
答案 1 :(得分:1)
records = [rec[7].replace(' ', '') + rec[9:12] + rec[3:4] for rec in records]
答案 2 :(得分:1)
Python文档写道: str.replace(old,new [,count])返回字符串的副本,其中所有出现的substring old都替换为new。如果给出可选参数计数,则仅替换第一次计数。 这个例子证明了这一点:
In [13]: a ="AB09CDE"
In [14]: a.replace(" ", "")
Out[14]: 'AB09CDE'
In [15]: print a
AB09CDE
因此,如果rec是字符串字段,那么:
records = [rec.replace(" ", "") for rec in records]