2012-12-20 3 views
0

좋아,이 특정 답변은이 작업을 수행하는 가장 좋은 방법을 가르쳐 주면서 검색했습니다. 나는 파이썬에 익숙하지 않고, 누군가 나를 도울 수있는 빠른 길을 알고 있기를 바랬다! 여기에 입력 데이터 파일의 예는 다음과 같습니다파이썬을 사용하여 최대 값을 출력 파일로 가져 오기

위도, 긴, 바르, ID, 날짜 시간
47.022, -104.330,10, MBVR 12/20분의 12 6시 36분 0초
47.022 - 104.33011, MBVR, 12/12/20 06:26:00
, -104.253,10, MCOM, 12/12/20 06:41:00
48.810, -104.253,13, MCOM, 12/12/20 06:38:00
48.810, -104.253,12, MCOM, 12/12/20 06:48:00
47.022, -104.330,11, MBVR, 12/12/20 05:17:00
47.022, -104.330,10, MBVR, 12/12/20 05:34:00
47.022, -104.330,12, MBVR, 12/12/20 05:24:00

파일에는 여러 가지 ID가있을 수 있으며 이는 단지 샘플 일뿐입니다. 나는 데이터를 수집하고 그것을 분리하고, 출력 파일을 작성하는 프로그램을 가지고있다. 여기 내 코드의 일부입니다 :

csv_max = 'X:\\csv\\lsrwnd.dat' 
my_file = open(csv_max, "rb") 
rowadd = my_file.next() 
for line in my_file: 
    items = line.split(",") 
    coords = items[0:2] 
    wind = items[2] 
    station = items[3] 
    timestamp = items[4] 

그래서 여기까지 내 문제가 있습니다. 내가해야 할 일은 "id"열의 최대 값만 출력 파일을 만드는 것입니다. 그래서, "station"이 반복되면, 그 스테이션의 각 발생을 실행하고, 최대 "id"를 찾고, 각각의 "station"에 대해 "id"의 최대 값 라인을 반환하는 프로그램이 필요합니다. 위의 데이터 예에서, 내가 원하는 모든입니다

48.810, -104.253,13, MCOM/20분의 12 6시 38분 0초
47.022, -104.330,12, MBVR, 12/20분의 12 (12) 05:24:00

나머지는 덤프 될 수 있습니다. MCOM의 경우 최대 ID는 13이고 MBVR의 경우 최대 값은 12입니다. 따라서 50 개의 다른 스테이션이있는 경우 반환되는 50 개의 라인은 50 개의 라인 만 반환하면됩니다. 반환되는 각 50은 해당 스테이션의 최대 "ID"가됩니다. 출력 파일을 만들 수는 있지만 각 스테이션 및 다른 요소에 대한 최대 ID 데이터를 얻으려면 어떻게해야합니까? 사전을 사용해 보았지만 최대 값 키와 스테이션 이름 대신 전체 라인을 반환하는 방법을 알아내는 데 어려움을 겪고 있습니다. "날짜 시간"변수는 중요하지 않습니다 (최근 또는 첫 번째 발생이 필요하다는 측면에서). 도와 주셔서 미리 감사드립니다!

+0

실제로 최대 "가변"을 찾고 있습니다. 13, 최대 "Id"가 아님. "MBCOM"? –

+0

죄송합니다. 예, 혼란 스럽습니다. id는 스테이션 ID이고 var는 변수입니다. 붙잡는 것을 당신을 감사하십시오 – user1530884

답변

1
import csv 
d = {} 
with open('input.csv', 'r') as f: 
    csvr = csv.DictReader(f) 
    for rec in csvr: 
     if rec['Id'] not in d or int(rec['Var']) > int(d[rec['Id']]['Var']): 
      d[rec['Id']] = rec 
with open('output.csv', 'w') as f: 
    csvw = csv.DictWriter(f, fieldnames=csvr.fieldnames) 
    csvw.writeheader() 
    csvw.writerows(d.itervalues()) 

output.csv 파일은 다음과 지금 보이는 :

Lat,Long,Var,Id,Date Time 
48.810,-104.253,13,MCOM,12/12/20 06:38:00 
47.022,-104.330,12,MBVR,12/12/20 05:24:00 
+0

정확하게 나가 필요로 한 무엇을. 고맙습니다! 이런 일에 대해 읽고 싶은 곳이 있습니까? 내 프로그램으로 어쩔 수없는 일이 생길 때를 대비하여 좀 더 배우려고 노력 중입니다. 다시 감사합니다! – user1530884

+2

필요한 것은 http://docs.python.org입니다. –

0

당신이 사전이라고 max_stations의 최대 ID 값을 저장, 당신의 라인을 통해 반복하고있다.

csv_max = 'X:\\csv\\lsrwnd.dat' 
my_file = open(csv_max, "rb") 
rowadd = my_file.next() 
max_stations = {} 
for line in my_file: 
    items = line.split(",") 
    coords = items[0:2] 
    wind = items[2] 
    station = items[3] 

    try: 
     current_wind = max_stations[station] 
    except IndexError: 
     current_wind = wind 
    max_wind = wind if wind >= current_wind else current_wind 

    max_stations[station] = max_wind 
    timestamp = items[4] 
관련 문제