【发布时间】:2016-01-11 16:54:49
【问题描述】:
我正在尝试从文本文件中读取不同的行。
目前我有一个程序可以从文本文件中读取以下类型的行,如果它遵循这种格式:
6361550850261,SHOWALL
APN="3"
IGF=15
VOW=117
VWD=12
[+][+]52
使用此代码:
def make_dict(data):
return dict((line.split(None, 1)[0], line)for line in data)
def process(infile, outfile, keywords):
keys = [[k[0], k[1], 0] for k in keywords]
endk = None
with open(infile, 'rb') as fdin:
with open(outfile, 'ab') as fdout:
fdout.write("|<" + words + ">|" + "\r\n")
for line in fdin:
if endk is not None:
fdout.write(line)
if line.find(endk) >= 0:
fdout.write("\r\n")
endk = None
else:
for k in keys:
index = line.find(k[0])
if index >= 0:
fdout.write(line[index + len(k[0]):].lstrip())
endk = k[1]
k[2] += 1
if endk is not None:
print 'Serial Number not Found'
raise Exception(endk + "Not found before end of file")
return keys
infile 是我从中读取的文件,outfile 是输出文本文件,keywords 是我在文本文件中查找的序列号。
这适用于这种类型的格式化文本。 但是,如果我有以下文本:
*GS,6361550850261,211635181215,,APN;"3",IGF:A;15;VOW:117,VWD;12,ADC:12.40;[+][+]52
请注意,我使用逗号作为分隔符来分隔数据,而不是空格。
我怎样才能使用与顶部文本文件相同的想法。
所以总的来说,我只是想读取使用这种格式而不是其他格式的行。
编辑:
作为输出示例:
如果我有这条线:
*GS,6361550850261,211635181215,,APN;"3",IGF:A;15;VOW:117,VWD;12,ADC:12.40;[+][+]52
进入这个:
*GS
6361550850261
211635181215
APN:"3"
IGF:A;15
VOW:117
VWD:12
ADC:12.40
【问题讨论】:
-
你试过
line.split(',')吗? -
csv模块有什么问题? -
我没有尝试过 CSV 模块,因为我一直试图改变我当前的
process定义以适应它。我会考虑使用csv -
您能展示一下您的预期输出吗?该脚本是否需要与您的两个示例输入一起使用?
-
@MartinEvans 我添加了一个输出示例
标签: python text file-io delimiter