Python - 替换列表中的字符

时间:2013-07-15 14:35:59

标签: python list

我正在开发一个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的新手,所以任何指导都会感激不尽!

3 个答案:

答案 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]