按每个字段编辑文件

2024-05-05 20:37:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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替换具有上述条件的字段,有可能吗


Tags: 文件csv代码元素列表datetimefilenamereader
1条回答
网友
1楼 · 发布于 2024-05-05 20:37:50

你的思路是对的,但是你的代码有几个问题:

1)导入语句。

  • 导入语句应该全部位于程序的顶部。目前,您在第3行中使用csv.reader,但尚未导入csv
  • 导入datetime模块的方式与大多数代码不一致。这有点混乱,因为the ^{} module also has a ^{} class。考虑到您想要做的事情,将import语句更改为import datetime,将第8行更改为td=datetime.datetime.now()now是datetime类的函数)是最简单的

2)fieldrow进行迭代是多余的。您拥有的构造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,需要使用^{}将其写回文件

相关问题 更多 >