使用for循环更改CSV中的日期值

2024-06-26 12:33:12 发布

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

我有一个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循环。你知道吗

非常感谢您的帮助!你知道吗


Tags: 文件csvinimportforexamplecolumnopen
2条回答

调用list(firstReader)时,将所有CSV数据读入firstData列表。当您稍后调用for row in firstReader:时,firstReader已经用完了,所以不会循环任何内容。相反,尝试将其更改为for row in firstData:。你知道吗

另外,当您试图写入文件时,您试图将firstFile写入文件,而不是更改的行。我会让你去弄清楚如何更新行中的日期,但是在那之后你需要给文件一个字符串来写。这个字符串应该是', '.join(row),所以outputFile.write(', '.join(row))。你知道吗

最后,应该只打开一次输出文件,而不是每次在循环中打开。将open调用移到循环上方,close调用移到循环后面。当你有时间的时候,在google上搜索“python context manager open file”,寻找更好的方法来管理打开的文件。你知道吗

你可以用熊猫和裸体。在这里,我从头开始创建一个数据帧,但您可以直接从.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'])

相关问题 更多 >