Python 基于前几行编辑csv文件中的行

Python 基于前几行编辑csv文件中的行,python,csv,Python,Csv,我对python非常陌生,我在这里使用它,因为我告诉我它对fileIO有好处 我有一个以下格式的CSV文件。它记录了我的员工的日常活动 日期、姓名、项目、经理 2010年1月1日,汤米,HyperDyne,乔·布洛格斯 2010年1月1日,苏,机器人,乔·布洛格斯 2010年1月1日,马克,海珀达因,乔·布洛格斯 2010年1月2日,汤米病了 2010年1月3日,汤米,海伯丁,乔·布洛格斯 当员工标记为生病时,“经理”字段始终为空。我想用该员工以前的经理条目填写经理字段。我想填写csv中的所

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

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


日期、姓名、项目、经理

2010年1月1日,汤米,HyperDyne,乔·布洛格斯

2010年1月1日,苏,机器人,乔·布洛格斯

2010年1月1日,马克,海珀达因,乔·布洛格斯

2010年1月2日,汤米病了

2010年1月3日,汤米,海伯丁,乔·布洛格斯


当员工标记为生病时,“经理”字段始终为空。我想用该员工以前的经理条目填写经理字段。我想填写csv中的所有空白,当我们不能说的时候,我想把空白填上

在伪代码ish中:

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
(可能会将其包装成一个for y 这需要编辑输入文件或输出新文件。我怀疑编辑输入文件会更容易,因为人们可能会连续多日生病


我想听听你的建议,我已经很久没有做过程序性编程了,你可以浏览input.csv的每一行,阅读并检查它,然后将它写入输出csv。 当您在各行中循环时,为每个人保留前经理的记录。 当遇到“病态”行时,请在记录中查找上一个经理

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

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)

输出一个新文件将是最简单的


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

我建议这样做的方式是使用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()

这是如此简单,我不敢相信我没有看到它。做SQL太久了!