仅打印字符串拆分的第二部分

时间:2017-02-13 21:07:08

标签: python

尝试按--字符拆分字符串,并希望在--之后打印数据。

例如:

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()

3 个答案:

答案 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

类似于抓取HOTX,只需自己做一些研究并替换我提供的pattern。希望它有所帮助

答案 2 :(得分:0)

我希望我能正确理解你:split创建一个列表,其中包含您作为sperator传递的字符串之间的元素,rsplit执行相同但是从字符串末尾扫描(这是例如,如果指定maxsplit参数,则很重要。对您而言,差异并不重要,您可以使用split,它将创建元素列表

['Cleveland-Elyria-Mentor    OH', '17460']

你想要17460,它是列表的最后一个元素,所以你需要的代码是

fipsplit = row.split('--')[-1]
writer.writerow(fipsplit)