根据前面的行编辑csv文件中的行

时间:2012-03-01 20:30:51

标签: python csv

我对python非常新,我在这里使用它,因为我告诉它对fileIO有好处。

我有以下格式的CSV文件。它记录了我的员工的日常活动。


日期,名称,项目,经理

01/01/10,Tommy,HyperDyne,Joe Bloggs

01/01/10,Sue,Robot,Joe Bloggs

01/01/10,Mark,HyperDyne,Joe Bloggs

02/01/10,Tommy,SICK,

03/01/10,Tommy,HyperDyne,Joe Bloggs


当员工被标记为SICK时,经理字段始终为空白。我想在Manager字段中填写该员工的上一个经理条目。我想填写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< n循环中)

这需要编辑输入文件,或输出新文件。我怀疑编辑输入文件会更容易,因为人们可能连续多天生病。

会喜欢一些建议,自从我完成程序式编程以来已经很久了

3 个答案:

答案 0 :(得分:0)

您可以浏览input.csv的每一行,读取+检查它,然后将其写入输出csv。 当你循环排队时,记录每个人的前任经理。 当您遇到“SICK”行时,请在记录中查找上一位经理

以下是一些不完整的代码来说明:

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)

答案 1 :(得分:0)

输出新文件最简单。

维护员工对经理的字典,并更新或查询每一行。

答案 2 :(得分: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()