Python 基于前几行编辑csv文件中的行
我对python非常陌生,我在这里使用它,因为我告诉我它对fileIO有好处 我有一个以下格式的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中的所
日期、姓名、项目、经理 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太久了!