Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的csv包含与脚本不同的格式_Python_Csv_Datetime - Fatal编程技术网

Python 为什么我的csv包含与脚本不同的格式

Python 为什么我的csv包含与脚本不同的格式,python,csv,datetime,Python,Csv,Datetime,我写了一些代码来标准化CSV日期的格式。第一列可以包含两种不同的时间格式:06/13/20和06.13.2020 我希望所有数据看起来像06/13/20 with open(fileread) as f: readCSV = csv.reader(f, delimiter=';') for row in readCSV: try: datetime_object = datetime.datetime.strptime(row[0], '%

我写了一些代码来标准化CSV日期的格式。第一列可以包含两种不同的时间格式:06/13/20和06.13.2020

我希望所有数据看起来像06/13/20

with open(fileread) as f:
    readCSV = csv.reader(f, delimiter=';')
    for row in readCSV:
        try:
            datetime_object = datetime.datetime.strptime(row[0], '%m.%d.%Y') # get date
            datetime_object = datetime_object.strftime('%m/%d/%y')
            print(datetime_object)
            save = datetime_object
        except:
            save = row[0]
        with open(filewrite, '+a', newline='') as g:
            out = [save, row[1], row[2], row[3], row[4]]
            writer = csv.writer(g, delimiter=';')
            print(out)
            writer.writerow(out)
注意:我使用“保存”是因为我认为在
行[0]
中会保存某种格式。我尝试使用
行[0]
而不是save,但没有其他效果

因此,我的“out”终端输出如下所示:

['06/02/20',...]

但在CSV中仍然是
06.13.2020

请尝试以下代码

我移动了打开输出文件并在for循环外创建CSV编写器的代码<如果提供的字符串与提供的格式不匹配,则code>strtime抛出
ValueError
,因此我缩小了捕获范围

您必须检查是否确实需要在第二行追加。检查可用的打开模式

打开(fileread)作为f:
将open(filewrite,'+a',newline='')作为g:
readCSV=csv.reader(f,分隔符=';')
writer=csv.writer(g,分隔符=';')
对于readCSV中的行:
保存=行[0]
尝试:
datetime_object=datetime.datetime.strtime(行[0],“%m.%d.%Y”)#获取日期
save=datetime\u object.strftime(“%m/%d/%y”)
除值错误外:
通过
out=[保存,第[1]行,第[2]行,第[3]行,第[4]行]
打印(输出)
writer.writerow(out)
编辑:缺少最后三行的缩进

修复后,我使用以下输入进行了测试:

06.13.2020;a;b;c;d
7/2/00;a;b;c;d
得到

06/13/20;a;b;c;d
7/2/00;a;b;c;d

请尝试以下代码

我移动了打开输出文件并在for循环外创建CSV编写器的代码<如果提供的字符串与提供的格式不匹配,则code>strtime抛出
ValueError
,因此我缩小了捕获范围

您必须检查是否确实需要在第二行追加。检查可用的打开模式

打开(fileread)作为f:
将open(filewrite,'+a',newline='')作为g:
readCSV=csv.reader(f,分隔符=';')
writer=csv.writer(g,分隔符=';')
对于readCSV中的行:
保存=行[0]
尝试:
datetime_object=datetime.datetime.strtime(行[0],“%m.%d.%Y”)#获取日期
save=datetime\u object.strftime(“%m/%d/%y”)
除值错误外:
通过
out=[保存,第[1]行,第[2]行,第[3]行,第[4]行]
打印(输出)
writer.writerow(out)
编辑:缺少最后三行的缩进

修复后,我使用以下输入进行了测试:

06.13.2020;a;b;c;d
7/2/00;a;b;c;d
得到

06/13/20;a;b;c;d
7/2/00;a;b;c;d

您正在文件打开行(在“+a”中用“a”标记)中使用追加模式,因此您更正的格式行将被追加而不是覆盖。小建议:您不需要每次打开输出文件并创建CSV编写器。我会把它移到for循环之外。这样你就不需要@DavidWierichs指出的apped了。是的,好的,我把它移到外面,但是对david说:新文件中没有正确的行,因此它们没有附加,它们不存在。你在文件开头行使用附加模式(在“+a”中用“a”标记),因此,您更正的格式行将被追加,而不是覆盖。小建议:您不需要每次都打开输出文件并创建CSV编写器。我会把它移到for循环之外。这样你就不需要@DavidWierichs指出的apped了。是的,好的,我把它移到外面,但是对david说:新文件中没有正确的行,所以它们没有附加,它们不存在代码不仅只写一行,格式还是一样的。对不起,我错误地缩进了最后三行。它们显然属于for循环;)嗯。。也许“行”中有某种隐藏格式,因为如果我在excel中打开该文件,它仍然是错误的格式。正确的行格式为“标准”,错误的行格式为“日期”。请尝试在文本编辑器而不是Excel中打开文件。这将显示文件的真实内容。Excel将解释数据并尝试猜测内容。我认为在导入CSV数据时可以忽略单元格类型。如果您需要Excel来正确显示它,您可以尝试选择整个列并手动将单元格类型设置为“日期”。该代码不仅只写一行,格式仍然相同..对不起,我错误地缩进了最后三行。它们显然属于for循环;)嗯。。也许“行”中有某种隐藏格式,因为如果我在excel中打开该文件,它仍然是错误的格式。正确的行格式为“标准”,错误的行格式为“日期”。请尝试在文本编辑器而不是Excel中打开文件。这将显示文件的真实内容。Excel将解释数据并尝试猜测内容。我认为在导入CSV数据时可以忽略单元格类型。如果需要Excel正确显示,可以尝试选择整个列并手动将单元格类型设置为“日期”。