Python 为什么我的csv包含与脚本不同的格式
我写了一些代码来标准化CSV日期的格式。第一列可以包含两种不同的时间格式:06/13/20和06.13.2020 我希望所有数据看起来像06/13/20Python 为什么我的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], '%
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正确显示,可以尝试选择整个列并手动将单元格类型设置为“日期”。