每个字段对文件进行Csv编辑

时间:2017-08-06 10:44:46

标签: python python-3.6

我是python的新手,我的老师告诉我创建一个代码,可以根据每个字段中的值编辑csv文件。 这是一个嵌套列表,用于显示csv文件,该文件按行分成列表,然后按元素分割:

[["A","B","C","D"],["Yes",1,"05/11/2016","0"],["No","12","05/06/2017","1"],["Yes","6","08/09/2017","2"]]

我应该做的是创建一个循环,可以用来检测内部列表中元素的位置,然后将每个列表的第一个元素更改为“否”,如果是,则今天的第3个元素到今天的日期,如果陈述的日期至少是6个月,如果大于1,则最后一个元素为1,我该怎么做呢?

以下是我的代码:

filename="Assignment_Data1.csv"
file=open(filepath+filename,"r")
reader=csv.reader(file,delimiter=",")
from datetime import datetime
six_months = str(datetime.date.today() - datetime.timedelta(6*365/12-1))
fm_six_months=str(datetime.datetime.strptime(six_months, '%Y-%m-%d').strftime('%d/%m/%Y'))

td=datetime.now()
deDate = str(td)[8:10] + "/"+ str(td)[5:7] + "/"+ str(td)[0:4]
import csv 
for row in reader:
    for field in row:
        if row[2]<=fm_six_months or row[4]>50 or row[2]<10:
            row[3]=deDate
            row[4]=0
            row[2]=100

基本上我要做的是用想要通过循环来替换具有上述条件的字段,是否可能?

1 个答案:

答案 0 :(得分:1)

您已走上正轨,但您的代码有几个问题:

1)导入语句。

  • 您的导入语句应该全部位于程序的顶部。目前,您在第3行使用csv.reader,但尚未导入csv
  • 您导入datetime模块的方式与大多数代码不一致。这有点令人困惑,因为the datetime module also has a datetime class。根据您的要求,最简单的方法是将import语句更改为import datetime,将第8行更改为td=datetime.datetime.now()now是日期时间类的函数)。

2)迭代field row是多余的。您拥有的构造for row in reader: for field in row将运行您的{ {1}}声明其他不必要的时间。

3) Python为零索引。这意味着第一个元素是使用if访问的列表,而不是row[0]。在您的情况下,您的CSV的第四列将通过row[1]访问。

4)你正在组合条件。从作业的措辞来看,它听起来像每个条件(比如&#34;如果是,则将第一个元素更改为否是的&#34;)应该独立于另一个。但是,row[3]表示如果任何条件为真,您将更改数据。听起来你需要三个独立的if row[2]<=fm_six_months or row[4]>50 or row[2]<10块。

5)你的代码没有作家。这真的很重要。简单地说if没有做任何持久的事情,因为row[2] = 100只是记忆中的一个对象;更改row实际上并未更改计算机上的CSV文件。要实际修改csv,您需要使用csv.writer将其写回文件。