使用for循环在.csv中更改日期值

时间:2018-11-26 17:29:14

标签: python csv

我有一个csv文件,需要更改每行中的日期值。要更改的日期显示在csv每一行的同一列中。

import csv

firstfile  = open('example.csv',"r")
firstReader = csv.reader(firstfile, delimiter='|')
firstData = list(firstReader)

DateToChange = firstData[1][25]
ChangedDate = '2018-09-30'

for row in firstReader:
        for column in row:
            print(column)
            if column==DateToChange:
                  #Change the date

    outputFile = open("output.csv","w")
    outputFile.writelines(firstfile)
    outputFile.close()

我正在尝试获取一个已经保存在csv中的日期,并使用for循环对其进行更改,然后输出具有更改日期的原始文件。但是,上面的代码似乎根本不执行任何操作。我是Python的新手,所以我可能不太了解如何正确使用for循环。

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:1)

调用list(firstReader)时,您将所有CSV数据读入firstData列表中。然后,稍后再调用for row in firstReader:时,firstReader已经耗尽,因此不会循环。而是尝试将其更改为for row in firstData:

此外,当您尝试写入文件时,您正在尝试将firstFile写入文件中,而不是写入更改后的行中。我将让您弄清楚如何更新行中的日期,但是之后,您需要为文件提供一个字符串以进行写入。该字符串应为', '.join(row),因此应为outputFile.write(', '.join(row))

最后,您应该一次打开输出文件,而不是每次循环都打开。将open调用移至循环上方,然后将close调用移至循环后。然后,请稍等片刻,在Google中搜索“ Python上下文管理器打开文件”,以寻求一种更好的方法来管理打开的文件。

答案 1 :(得分:0)

您可以使用pandas和numpy。在这里,我从头开始创建一个数据框,但是您可以直接从.csv加载它:

import pandas as pd
import numpy as np

date_df = pd.DataFrame(
    {'col1' : ['12', '14', '14', '3412', '2'],
     'col2' : ['2018-09-30', '2018-09-14', '2018-09-01', '2018-09-30', '2018-12-01']
    })

date_to_change = '2018-09-30'
replacement_date = '2018-10-01'

date_df['col2'] = np.where(date_df['col2'] == date_to_change, replacement_date, date_df['col2'])