我是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"]]
我要做的是做一个循环,可以用来检测元素在内部列表中的位置,然后将每个列表的第一个元素更改为“否”(如果是),第三个元素更改为今天的日期(如果所述日期至少是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
基本上,我要做的是通过一个循环,用want替换具有上述条件的字段,有可能吗
你的思路是对的,但是你的代码有几个问题:
1)导入语句。
csv.reader
,但尚未导入csv
李>datetime
模块的方式与大多数代码不一致。这有点混乱,因为the ^{import datetime
,将第8行更改为td=datetime.datetime.now()
(now
是datetime类的函数)是最简单的李>2)对
field
和row
进行迭代是多余的。您拥有的构造for row in reader: for field in row
将额外运行if
语句,这是不必要的3)Python是零索引的。这意味着第一个元素是使用
row[0]
而不是row[1]
访问的列表。在您的示例中,CSV的第四列将通过row[3]
访问4)你在组合条件。从作业的措辞来看,似乎每个条件(如“如果第一个元素是yes,就把它改成No”)都是独立的。但是,
if row[2]<=fm_six_months or row[4]>50 or row[2]<10
意味着如果任何条件为真,您将更改数据。听起来您需要三个独立的if
块5)您的代码没有编写器。这确实是个大问题。简单地说} 将其写回文件
row[2] = 100
不会做任何持久的事情,因为row
只是记忆中的一个对象;更改row
实际上不会更改计算机上的CSV文件。要真正修改csv,需要使用^{相关问题 更多 >
编程相关推荐