前言 - 我对Python还比较陌生,之前有使用过其他语言。
我有一个文本文件,其中包含一列字符串,格式为"./abc123a1/type/1ab2_x_data_type.file.type",但略有变化。
我需要从所有几百行中提取abc123a1和1ab2部分,并将它们放在两个csv列(列a和b)下。有时可能会出现“1ab2_a”和“1ab2_b”,但我只想要一个1ab2。因此,我想获取“1ab2_a”并忽略其他所有内容。
我有正则表达式,我认为它可以工作:
我有一个文本文件,其中包含一列字符串,格式为"./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
时,它是否包含你想要的数据? - Joseph Stover