【发布时间】:2015-11-15 14:27:15
【问题描述】:
前言 - 我对 Python 还是很陌生,在其他语言方面有更多经验。
我有一个文本文件,其中包含通用(但略有不同)格式“./abc123a1/type/1ab2_x_data_type.file.type”的单列字符串列表
我需要从所有数百行中提取 abc123a1 和 1ab2 部分,并将它们放在 csv 中的两列(a 和 b 列)下。有时可能会有一个“1ab2_a”和一个“1ab2_b”,但我只想要一个 1ab2。所以我想抓住“1ab2_a”并忽略所有其他人。
我有我认为可以工作的正则表达式:
tmp = list()
if re.findall(re.compile(r'^([a-zA-Z0-9]{4})_'), x):
tmp = re.findall(re.compile(r'^([a-zA-Z0-9]{4})_'), x)
elif re.findall(re.compile(r'_([a-zA-Z0-9]{4})_'), x):
tmp = re.findall(re.compile(r'_([a-zA-Z0-9]{4})_'), x)
if len(tmp) == 0:
return None
elif len(tmp) > 1:
print "ERROR found multiple matches"
return "ERROR"
else:
return tmp[0].upper()
我正在尝试逐步制作此脚本并进行测试以确保它有效,但事实并非如此。
import sys
import csv
listOfData = []
with open(sys.argv[1]) as f:
print "yes"
for line in f:
print line
for line in f:
listOfData.append([line])
print listOfData
with open('extracted.csv', 'w') as out_file:
writer = csv.writer(out_file)
writer.writerow(('column a', 'column b'))
writer.writerows(listOfData)
print listOfData
除了列标题之外,仍然无法在 csv 中获取任何内容,更不用说解析版本了!
有没有人有更好的想法或格式可以做到这一点?一位朋友提到要研究 glob.glob,但我也没有运气让它工作。
【问题讨论】:
-
当你打印
listOfData时,它有你想要的数据吗? -
"所以我想抓住 "1ab2_a" 而忽略所有其他的。" 不确定是否能很好地理解这句话。您要提取
1ab2还是1ab2_a? -
您能否编辑问题以添加更多示例输入行?还要添加该输入的预期输出。
标签: python regex python-2.7 parsing csv