2012-03-01 6 views
1

저는 매우 파이썬에 새로운 것이 었습니다. 필자는 Im이 fileIO에 좋다고 말한 것처럼 여기에 사용하고 있습니다.이전 줄을 기반으로 한 csv 파일의 줄 편집

다음 형식의 CSV 파일이 있습니다. 내 직원의 일상 활동을 기록합니다.


날짜, 이름, 프로젝트 관리자

01/01/10, 토미, HyperDyne, 조 Bloggs에

01/01/10, 고소, 로봇, 조 Bloggs에

01/01/10, 마크, HyperDyne,

02/01/10, 토미, SICK 조 Bloggs에,

03/01/10, Tomm y, HyperDyne, Joe Bloggs


직원이 SICK로 표시되면 관리자 필드는 항상 비어 있습니다. 관리자 필드에 해당 직원의 이전 관리자 항목을 채우고 싶습니다. 나는 csv의 모든 공백을 채우고 우리가 말할 수 없을 때 NULL을 넣고 싶다.

의사 틱에서

:

Forall lines n 
if n.Project = "Sick" 
    y = 1 
    if n-y.name = n.name 
     n.manager = n-y.manager 
    else y++ 
    if y > n 
     n.manager = null 

이 될 하나의 입력 파일 또는 출력 새 파일을 편집해야합니다 (아마 Y < 아마 N for 루프에 그 래핑 수) . 사람들이 여러 날을 아프게 보일 수 있으므로 입력 파일을 편집하는 것이 더 쉽다고 생각합니다.

이 몇 가지 조언을 싶어요, 필자 이래 있었다 나이 당신은 그것을 확인 + 읽기, input.csv의 각 라인을 통과 한 후 출력 CSV에 쓸 수있는 절차 적 프로그래밍

답변

0

을 수행. 회선을 반복하면서 각 사람의 이전 관리자 레코드를 보관하십시오. 당신이 '아픈'행을 발생하면 는 여기에 설명하기 위해 몇 가지 incpomplete 코드의 기록을

에서 이전 관리자 조회 :

previous_managers = dict() 
for line in csv: 
    name = line.name 
    project = line.project 
    manager = line .manager 

    if project == 'SICK': 
     manager = previous_managers[person] or 'NULL' 
    else: 
     previous_managers[person] = manager 

    write(name, project, manager) 
+0

이것은 매우 간단합니다. 나는 그것을 볼 수 없다고 믿을 수 없습니다. SQL을 너무 오랫동안 해왔다! – Pythonn00b

0

쉬운 일 것입니다 새 파일을 출력한다.

직원 대 관리자 사전을 유지 관리하거나 업데이트하거나 각 행을 쿼리하십시오.

0

내가하고 싶은 것은 csvreader를 사용하여 csv를 추출하고 이전 관리자의 사전을 만드는 것입니다. 병이 들었다면 목록에서 이전 관리자를 가져옵니다. 그렇지 않으면 이전 관리자를 업데이트하십시오.

아래와 같은 좋은 예를 제공했습니다. 나는 아직 그것을 테스트하지 않았기 때문에 몇 가지 서식을 수정해야 할 수도 있습니다. 그러나 이것은 대부분의 개념입니다.

#import csv library to handle the csv, the sys library for sys.argv[1] which allows you to use command line arguments 

import csv 

#reading the input .csv file 
filename = #insert filename here 
input = open(filename,'r') 
reader = csv.reader(input) 
output = open('out.csv','w') 

prevManager = {} 

for row in reader: 
    date = row[0] 
    name = row[1] 
    project = row[2] 
    if project == 'SICK': 
     manager = prevManager[name] 
    else: 
     manager = row[3] 
     prevManager[name] = manager 
    output.write(date,name,project,manager) 

input.close() 
output.close() 
관련 문제