繁体   English   中英

Python-替换列表中的字符

[英]Python - Replacing characters in a 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相当陌生,因此将不胜感激地收到任何指导!

问题是您正在使用切片:

>>> 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]
 records = [rec[7].replace(' ', '') + rec[9:12] + rec[3:4] for rec in records]

Python文档写道:str.replace(old,new [,count])返回该字符串的副本,其中所有出现的substring都被new替换。 如果给出了可选的参数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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM