2013-02-13 2 views
0

CSV를 구문 분석하려고하는데 어느 기준에 부합하는지 조건이 충족되면 새 CSV에이를 작성하십시오. 예를 들어CSV를 쿼리하고 원본 CSV 및 결과를 단일 CSV Python으로 작성하십시오.

나는 숫자가 첫 번째 열에 표시하지 두 번째는 그때 그 추출해야합니다 그래서 만약 각 라인을 분석 할 필요가

123 Some Street 
Flat 1, 21 Other road 
House, Someother street 

처럼 보이는 CSV가있는 경우 두 열 모두에 숫자가 있으면 둘 다 추출해야하며 숫자가없는 경우 첫 번째 열에 텍스트를 추출해야합니다. 그런 다음 원본 열 2 개와 새로운 번호 1, 2, 텍스트 3 개의 새로운 csv를 작성하십시오. 즉 플랫 번호, 집 번호, 집 이름. 그래서 새로운 CSV 매우 도움이 될 것

123 Some Street, , 123, 
Flat 1, 21 Other road, 1, 21, 
House, Someother street, , , House. 

모든 지침과 같을 것이다. 내가 출력이 가진 새로운 CSV가 될 싶은

:

감사

편집

import csv 

csvFile = 'myData.csv' 
csvOut = 'myOut.csv' 

reader = csv.reader(csvFile) 
writer = csv.writer(csvOut) 

for row in reader: 
    num = \d | \d\d | \d\d\d 
    if row [0] || row [1] == num 
     if row [1] == num 
      writer.row [3] 
     else row [0] == num 
      writer.row [2] 
      writer.row [3] 
    else writer.row [0] [2] 

csvOut.close() 

다시

나는이 명확 explination 될 수 있기를 바랍니다

편집 행 [0], [1]에 원본 데이터가있는 경우 행에 숫자가 하나만 있으면 행 [3]에 기록 된 집 번호가 한 행에 2 개의 숫자 (행 [0] 및 행 [1]), 행 [2] 및 [3]에 각각 기록되어야하며 숫자가 없으면 행 [0]의 문자열이 행 [4]에 기록됩니다. 궁극적으로 플랫 번호, 집 번호 및 집 이름을 3 개의 다른 열로 구분해야합니다.

내가 코드에 노력하고있다 지금은 다음을 또 편집, 나는 점점 더 가까이 느낀다 그러나 아직도 멀리 방법은?

import csv 
import re 

csvFile = open(myData.csv, 'rb') 
csvOut = open(myOut.csv, 'wb') 

reader = csv.reader(csvFile) 
writer = csv.writer(csvOut) 

for row in reader: 
    a = row [0] re.compile('\d' | '\d\d' | '\d\d\d') 
    a1 = row [0] re.compile('\d' | '\d\d' | '\d\d\d') 
    b = row [1] 
    b1 = row [1] re.compile('\d' | '\d\d' | '\d\d\d') 
     if b = re.compile('\d' | '\d\d' | '\d\d\d') 
      writer.writerow(a,b,a1,b1,) 
     elif a = re.compile('\d' | '\d\d' | '\d\d\d') 
      witer.writerow(a,b, , b1,) 
     else 
      writer.writerow(a,b, , ,a) 

csvOut.close() 

감사

+3

시작 결과를 갖는다 /csv.html). – Blender

+0

먼저 편집 해 주셔서 감사합니다. 나는 CSV를 통해 좋은 모습을 보았고 csv.dictreader는 현재 내 문제는 로직/정규식이 필요한 항목을 추출하는 방법에 관한 것입니다. 감사합니다 – user1463172

+0

지금 가지고있는 코드를 게시 할 수 있습니까? – Blender

답변

0

나는 당신이 필요로 완전히 확실하지 않다으로이 단서를 얻을 수 있습니다.

$cat t1

123 Some Street 
Flat 1, 21 Other road 
House, 23 Someother street 

import csv 
import re 
p = re.compile('\d+') 
for row in csv.reader(open('t1')): 
    print "ROW", row 
    match = p.search(row[0]) 
    if match: 
     print "\t#1", match.group() 
    if len(row) > 1: 
     match = p.search(row[1]) 
     if match: 
      print "\t#2", match.group() 

출력

ROW ['123 Some Street'] 
    #1 123 
ROW ['Flat 1', ' 21 Other road'] 
    #1 1 
    #2 21 
ROW ['House', ' 23 Someother street'] 
    #2 23 
+0

감사합니다. 도움이됩니다. 원래 도움이되지 않은 부분에 오류가 발생했습니다 (수정했습니다). 나는 행 [0], [1]에 원본 데이터가있는 새로운 CSV로 출력하고 행에 하나의 숫자 만 있으면 (즉, 행 [3]에 기록 된 집 번호가 있으면) 출력하고 싶습니다. 는 행 번호가 2이고 행 번호가 없으면 행 [0]의 문자열이 행 [4]에 기록됩니다. 궁극적으로 플랫 번호, 집 번호 및 집 이름을 3 개의 다른 열로 구분해야합니다. 감사합니다 – user1463172

0

다음 코드는 당신이 필요로하는 모든 것을 할 수 있습니다. 출력을 위해 튜플을 색인화하고 원하는 구성 요소를 작성하면됩니다. 각 결과는 6 개 요소

#(flat str, flat #, street str, street #, street, street type) 

a = """ 
123 Some Street 
Flat 1, 21 Other road 
House, Someother street 
""" 

import re 
#flat gets a word, 0 or more spaces, 0 or more digits 
flat = "([a-z]+ *(\d+)*)" 
#street gets 0 or more digits, 1 or more spaces, 1 or more words with a space consuming until it hits street, or road or drive 
street = "((\d+)* +([a-z]+)+?(street|road|drive))" 
address = "%s*.*?%s" % (flat,street) 
m  = re.compile(r"%s" % address, re.I) 
results = m.findall(a) 
with('output.csv','w') as fout: 
    #whatever you wish to name your columns 
    fout.write("Building,Address,Suite Number, Building Number") 
    for r in results: 
     fout.write("%s,%s,%s,%s" % (r[0],r[2],r[1],r[3])) 

가 http://docs.python.org/2/library ([csv` 모듈은`]의 문서에 실시 예와 협력하여

[('', '', '123 Some Street', '123', 'Some ', 'Street'), 
('Flat 1', '1', '21 Other road', '21', 'Other ', 'road'), 
('House', '', ' Someother street', '', 'Someother ', 'street')] 
+0

고마워요, 난 아주 파이썬에 새로운거야, 당신이 그것을 쓰는 방법에 관해서는 올바른 방향으로 나를 가리켜 주시겠습니까. – user1463172

+0

결과가 출력되도록 게시물이 업데이트되었습니다. 흥미 진진한 regex에 대해 더 많이 배우기 위해 'python re'라고 쓰여 있는데, 그것은 제가 배운 가장 유용한 것들 중 하나입니다. – pyInTheSky

관련 문제