2012-03-01 54 views
1

對python非常非常新,我在這裏使用它,因爲我告訴它它對fileIO有好處。基於前面的行編輯csv文件中的行

我有以下格式的CSV文件。它記錄我的工作人員的日常活動。


日期,名稱,項目經理

01/01/10,湯米,HyperDyne,李四

01/01/10,蘇,機器人,李四

01/01/10,馬克,HyperDyne,李四

02/01/10,湯米,SICK,

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


當僱員被標記爲SICK時,經理字段始終爲空。我想用該員工以前的經理記錄填寫經理字段。我想填寫csv中的所有空白,並且當我們不能說時加入NULLS。

在僞上下的:

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的<ñ循環也許)

這將需要可以編輯輸入文件,或輸出一個新的文件。我懷疑編輯輸入文件會更容易,因爲人們可能會連續多天生病。

很想一些建議,因爲它的Ive一直做的青睞過程編程

回答

0

你可以去通過input.csv的每一行,讀+檢查,然後將其寫入輸出CSV。 當您循環播放時,請記錄每個人的前任經理。 當你遇到一個「病態」行,查找以前的經理在您的記錄

下面是一些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 2012-03-01 22:00:29

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