我对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循环中)
这需要编辑输入文件,或输出新文件。我怀疑编辑输入文件会更容易,因为人们可能连续多天生病。
会喜欢一些建议,自从我完成程序式编程以来已经很久了
答案 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()