Python 读取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"

我有一个.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","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