尝试按--
字符拆分字符串,并希望在--
之后打印数据。
例如:
1.Cleveland-Elyria-Mentor OH--17460
2.Dallas-Plano-Irving TX (MSAD)--19100
etc.
如何仅打印:
a.TX (MSAD)
OH
和
b. 17460
19100
代码:
#!/usr/bin/python
import csv
import re
sample="""columnA,ColumnB,columnC
1,Cleveland-Elyria-Mentor OH--17460
2,Dallas-Plano-Irving TX (MSAD)--19100
3,ASJDFJKDJ-kD-JE WA--21092"""
open('sample.csv','w').write(sample)
with open('sample.csv') as sample, open('final_output.csv','w') as output:
reader = csv.reader(sample)
writer = csv.writer(output)
# discard input header
next(reader)
# write output header
writer.writerow(['col1','col2','col3'])
#process rows
for row in reader:
if row:
for stsplit in re.split(r'--', row[1]):
writer.writerow([row[0], stsplit, row[1]])
print open('final_output.csv').read()
答案 0 :(得分:3)
rsplit
不是正则表达式,所以请尝试使用正则表达式。
s = """1.Cleveland-Elyria-Mentor OH--17460
2.Dallas-Plano-Irving TX (MSAD)--19100"""
import re
for line in s.split('\n'):
match = re.search(r'(?P<state>\b\w{2}\b).*--(?P<zip>\d{5})$', line)
print(match.group('state'), match.group('zip'))
输出
OH 17460
TX 19100
答案 1 :(得分:3)
以数值为例:
import re
DOUBLE_DASH ="(?<=--)\d+"
def grab_numeric(line, pattern=DOUBLE_DASH):
result = re.search(pattern, line)
num = result.group(0) if result else None
return num
with open("sample.csv") as inputs:
for line in inputs:
result = grab_numeric(line)
print(result)
将您的内容放入sample.csv和test.py中的代码并运行
python test.py
输出:
17460
19100
类似于抓取HO
和TX
,只需自己做一些研究并替换我提供的pattern
。希望它有所帮助
答案 2 :(得分:0)
我希望我能正确理解你:split
创建一个列表,其中包含您作为sperator传递的字符串之间的元素,rsplit
执行相同但是从字符串末尾扫描(这是例如,如果指定maxsplit
参数,则很重要。对您而言,差异并不重要,您可以使用split
,它将创建元素列表
['Cleveland-Elyria-Mentor OH', '17460']
你想要17460
,它是列表的最后一个元素,所以你需要的代码是
fipsplit = row.split('--')[-1]
writer.writerow(fipsplit)