Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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错误_Python_Datetime_Csv_Slice - Fatal编程技术网

从列表切片获取时间戳时发生Python错误

从列表切片获取时间戳时发生Python错误,python,datetime,csv,slice,Python,Datetime,Csv,Slice,我正在编写一个脚本,将一个大的CSV文件分块成更小的分块文件。它交叉引用一个日志文件,该文件保存最后一个分块的时间戳,因此只写入/分块晚于记录时间的时间戳 csv文件的第一列具有时间戳,其格式为%Y%m%d%H%m%S格式。CSV文件还有四行我不想/不需要的头信息,ts_pre子句中的行会删除这些信息 log\u lookup()。显然,我正在与六个不同的电台合作,它们都有不同的信息列,只是它们都共享我在第二段中描述的相同结构 部分脚本是: import csv, sys, datetime

我正在编写一个脚本,将一个大的CSV文件分块成更小的分块文件。它交叉引用一个日志文件,该文件保存最后一个分块的时间戳,因此只写入/分块晚于记录时间的时间戳

csv文件的第一列具有时间戳,其格式为
%Y%m%d%H%m%S
格式。CSV文件还有四行我不想/不需要的头信息,ts_pre子句中的
行会删除这些信息

log\u lookup()。显然,我正在与六个不同的电台合作,它们都有不同的信息列,只是它们都共享我在第二段中描述的相同结构

部分脚本是:

import csv, sys, datetime

def log_lookup():  
    global STN_num
    global STN_date
    with open('/home/log.txt', 'rb') as open_log:    
        log_file = csv.reader(open_log)
            for row in log_file:
                for item in row:
                     STN_date.append(item)
            if find == 'STN_1':
                return STN_date[1]
            if find == 'STN_2':           
                return STN_date[2]
            if find == 'STN_3':
                return STN_date[3]
            if find == 'STN_4':
                return STN_date[4]
            if find == 'STN_5':
                return STN_date[5]
            if find == 'STN_6':
                return STN_date[6]

def get_ts(line):
    print line[0:19]
    return datetime.datetime.strptime(line, "%Y/%m/%d %H:%M:%S")

def main():
    log = str(log_lookup()) #useful for knowing when to start chunking 
    log_datetime = datetime.datetime.strptime(log, "%Y/%m/%d %H:%M:%S")       

    with open(sys.argv[1], 'rb') as open_file: 
        ts_from_file = csv.reader(open_file)
        for genrows in ts_from_file:            
            ts_pre.append(genrows)  
            for rows in ts_pre:             
                if rownum < 4:
                    ts_pre.pop()
                    rownum += 1
                else:       
                    for line in rows:                            
                        if get_ts(line) > log_datetime:                 
                            timeseries.append(line)
。。。使用0作为占位符。(很明显我不是程序员吗?)

示例CSV文件如下所示:

"2011/10/03 16:40:00",0,0
"2011/10/03 16:45:00",1,0
"2011/10/03 16:50:00",2,0
"2011/10/03 16:55:00",3,0
ts_line(line)
函数时,我得到的错误是它说
line[0:19]
是:

2011/10/03 16:40:00
0
函数返回
0
,Python抛出以下错误:

ValueError: time data '0' does not match format '%Y/%m/%d %H:%M:%S'
我已经验证了返回的
0
是CSV文件中的第二项,但我不明白Python为什么在我的切片选择中返回它。有人能给我解释一下为什么它会返回那个值,以及我需要做什么来获取时间戳来与日志时间戳进行比较


对于额外的学分,任何关于编码/风格的建议都会得到赞赏和/或关于更好地完成我正在做的事情的建议。我正在查看的CSV文件非常大(~8MB),因此效率越高越好

看起来您正在为csv的每一行中的每一列调用
get\ts

而不是

for line in rows:                            
    if get_ts(line) > log_datetime:                 
        timeseries.append(line)
尝试:


谢谢,这让我走上了正确的方向。最后,我使用了
if-get\ts(rows[0:19])>log\u-datetime:timeseries.append(rows)
,它读得恰到好处。现在我遇到了一个问题,读者将午夜时间戳读取为日期
(2011/04/06)
,而不是
(2011/04/06 00:00)
,这会在我尝试比较时抛出错误。啊,关于我在午夜的时间戳,当从Windows中的Excel转换为GNU/Linux中的gedit或gnumeric时,午夜时间戳被截断了。在几分钟内重新编辑,它的工作原理与它应该的一样。应该可以正常工作,因为我最终会在Windows机器上使用它。
for line in rows:                            
    if get_ts(line) > log_datetime:                 
        timeseries.append(line)
if get_ts(line[0]) > log_datetime:                 
    timeseries.append(line)