我有一个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循环。
非常感谢所有帮助!
答案 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'])