2012-03-01 37 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()