【发布时间】:2015-03-07 14:00:53
【问题描述】:
我正在使用 Python 2.7.6 并学习使用 csv 模块。当我将输入文件解析为每行最后一个元素的 CSV 输出文件时,我的脚本以某种方式在最后一个元素之后添加了意外的双引号和几个空格。我无法使用常规替换删除那些双引号。
我可以删除多余的双引号的唯一方法是使用:
tmp[1] = tmp[1][:-3]
我不明白在解析输入时如何添加额外的双引号。当输入文件没有双引号时,请告诉我为什么或如何将这些双引号添加到partno。
我的代码:
import re
import csv
fname = "inputfile"
try:
fhand = open(fname)
except:
print 'File cannot be opened:', fname
exit()
domain = []
server = []
model = []
serial = []
dn = []
memsize = []
vid = []
partno = []
csv_out = open('/tmp/out.csv','wb')
writer = csv.writer(csv_out)
for line in fhand:
words = line.split("; ")
tmp_row_list = []
for number in [0,1,2,3,4,5,6,7]:
tmp=words[number].split("=")
if "}" in tmp[1]:
tmp[1] = tmp[1][:-3]
#tmp[1] = re.sub('}','', tmp[1])
if number == 0: domain.append(tmp[1])
if number == 1: server.append(tmp[1])
if number == 2: model.append(tmp[1])
if number == 3: serial.append(tmp[1])
if number == 4: dn.append(tmp[1])
if number == 5: memsize.append(tmp[1])
if number == 6: vid.append(tmp[1])
if number == 7: partno.append(tmp[1])
rows = zip(domain,server,model,serial,dn,memsize,vid,partno)
writer.writerows(rows)
csv_out.close()
输入文件:
ffile:@{Ucs=uname; ServerId=4/6; Model=UCSB-B200-M3; Serial=FCH; AssignedToDn=; TotalMemory=98304; Vid=V06; PartNumber=73-14689-04}
ffile:@{Ucs=uname; ServerId=4/7; Model=UCSB-B200-M3; Serial=FCH; AssignedToDn=; TotalMemory=98304; Vid=V06; PartNumber=73-14689-04}
我的 bad 输出在我不得不删除它们之前有奇怪的双引号(如果用 re.sub 取消该行,带有双引号和额外空格的错误输出将显示在最后字段/元素):
uname,4/6,UCSB-B200-M3,FCH,,98304,V06,"73-14689-04
"
uname,4/7,UCSB-B200-M3,FCH,,98304,V06,"73-14689-04
"
【问题讨论】:
-
你有一个工作代码;
for line in fhand产生行,包括末尾的换行符;要删除它们,请使用.rstrip('\n')或re.sub('}|\n', ...)。
标签: python regex python-2.7 csv