Python 读取csv文件以解析日期
我有一个.csv文件,其中包含以下数据:Python 读取csv文件以解析日期,python,csv,Python,Csv,我有一个.csv文件,其中包含以下数据: equipement,"144444444" Date,"Time","measure" 16/09/2016,"07:15:00","16.47777" 16/09/2016,"07:30:00","15.44454" 16/09/2016,"07:45:00","16.21114" 我在这个文件上运行了一个python代码,我的目标是将如下内容作为输出: "measure","20160916071500","16.47777" "measure"
equipement,"144444444"
Date,"Time","measure"
16/09/2016,"07:15:00","16.47777"
16/09/2016,"07:30:00","15.44454"
16/09/2016,"07:45:00","16.21114"
我在这个文件上运行了一个python代码,我的目标是将如下内容作为输出:
"measure","20160916071500","16.47777"
"measure","20160916073000","15.44454"
"measure","20160916074500","16.21114"
这是我的密码:
import csv
import sys
import os
import re
import fnmatch
import csv
from dateutil.parser import parse as parseDate
from datetime import datetime, time, timedelta
file = open("myfile.csv", 'rt')
reader = csv.reader(file)
next(reader)
rows = list(reader)
firstline = rows[0]
header = firstline[2]
print header
for row in rows:
next(reader)
print rows[0]
if "".join(row).strip() != "":
chaine = str(row[0]+row[1])
#print chaine
date = chaine[:10] + " " + chaine[11:]
#print date
index = parseDate(date)
index = str(index).replace('-','')
index = str(index).replace(':','')
index = str(index).replace(' ','')
data = row[2]
我的问题是,我需要下一步(reader)跳过文件中的第一行和第二行,因为它们不包含任何日期。但我得到了这个错误:
Traceback (most recent call last): File "t.py", line 19, in <module> next(reader) StopIteration
Traceback(最近一次调用last):文件“t.py”,第19行,在下一个(读取器)StopIteration中
有什么想法吗?通过执行行=列表(读卡器)
,您已经耗尽了读卡器
,并将结果收集到名为行
的列表中。再次执行next(reader)
将引发StopIteration
不过,没有必要创建行
列表。您可以使用for
循环直接迭代读卡器
:
reader = csv.reader(file)
next(reader) # skip first line
secondline = next(reader) # capture second line
header = secondline[2]
for row in reader: # iterate from third line to the end
# next(reader) <-- don't do this, the for loop already does it for you
if "".join(row).strip() != "":
# ... your code processing row ...
reader=csv.reader(文件)
下一个(读卡器)#跳过第一行
第二行=下一行(读卡器)#捕获第二行
页眉=第二行[2]
对于读卡器中的行:#从第三行迭代到末尾
#接下来(读卡器)通过执行rows=list(读卡器)
,您已经耗尽了reader
,并将结果收集到一个名为rows
的列表中。再次执行next(reader)
将引发StopIteration
不过,没有必要创建行
列表。您可以使用for
循环直接迭代读卡器
:
reader = csv.reader(file)
next(reader) # skip first line
secondline = next(reader) # capture second line
header = secondline[2]
for row in reader: # iterate from third line to the end
# next(reader) <-- don't do this, the for loop already does it for you
if "".join(row).strip() != "":
# ... your code processing row ...
reader=csv.reader(文件)
下一个(读卡器)#跳过第一行
第二行=下一行(读卡器)#捕获第二行
页眉=第二行[2]
对于读卡器中的行:#从第三行迭代到末尾
#下一步(读者)如果您愿意,您可以使用熊猫解决它:
import pandas as pd
df = pd.read_csv('in.csv', skiprows=2, header=None, parse_dates=[[0,1]])
df['dt']=df["0_1"].apply(lambda x: x.strftime('%Y%m%d%H%M%S'))
df['mes'] = pd.Series(["measure"]*len(df), index=df.index)
df[['mes','dt',2]].to_csv('out.csv', quoting=True, index=None,header=None)
CSV文件:
"measure","20160916071500","16.47777"
"measure","20160916073000","15.44454"
"measure","20160916074500","16.21114"
如果您愿意,您可以使用熊猫解决此问题:
import pandas as pd
df = pd.read_csv('in.csv', skiprows=2, header=None, parse_dates=[[0,1]])
df['dt']=df["0_1"].apply(lambda x: x.strftime('%Y%m%d%H%M%S'))
df['mes'] = pd.Series(["measure"]*len(df), index=df.index)
df[['mes','dt',2]].to_csv('out.csv', quoting=True, index=None,header=None)
CSV文件:
"measure","20160916071500","16.47777"
"measure","20160916073000","15.44454"
"measure","20160916074500","16.21114"
只需使用two for循环
和一些字符串替换(如本例所示,我假设您的输入在.csv中被称为):
输出:
"measure","20160916071500","16.47777"
"measure","20160916073000","15.44454"
"measure","20160916074500","16.21114"
只需使用two for循环
和一些字符串替换(如本例所示,我假设您的输入在.csv中被称为):
输出:
"measure","20160916071500","16.47777"
"measure","20160916073000","15.44454"
"measure","20160916074500","16.21114"
您没有发布错误错误是:Traceback(最近一次调用):文件“t.py”,第19行,在下一个(读卡器)StopIteration中
您没有发布错误错误是:Traceback(最近一次调用):文件“t.py”,第19行,在下一个(读卡器)StopIteration中
您确定已删除行=列表吗(读卡器)
?是否确定for循环中没有next(读卡器)
?是否确定输入文件有多行?是,我需要此代码:rows=list(读卡器)firstline=rows[0]header=firstline[2]
以检索包含字符串“measure”的头。您的代码可以工作,但它没有给出我想要的结果。通过执行firstline=next(reader)
您已经捕获了第一行,可以从中提取标题。您不需要行
列表。标题位于第二行而不是第一行。我仍在尝试捕获它,而不使用熊猫
您确定已删除行=列表(读卡器)
?您确定没有下一个(读卡器)吗
在for循环中?您确定您的输入文件有多行吗?是的,我需要以下代码:rows=list(reader)firstline=rows[0]header=firstline[2]
以检索包含字符串“measure”的头。您的代码工作正常,但没有给出我想要的结果。通过执行firstline=next(reader)
您已经捕获了第一行,可以从中提取标题。您不需要行
列表。标题位于第二行而不是第一行。我仍在尝试捕获它,而不使用pandas