csv文件到日期格式

时间:2014-11-24 16:03:42

标签: python date csv

我想阅读日期的csv文件(如下所示),并在每个日期使用solar.GetAltitude循环浏览它以计算太阳高度列表。 (我在Windows 7 Enterprise上使用Python 2.7.2。)

CSV file: TimeStamp 01/01/2014 00:10 01/01/2014 00:20 01/01/2014 00:30
01/01/2014 00:40

我的代码提供了以下错误ValueError: unconverted data remains:。这表明错误的日期格式,但它在单个日期工作正常,而不是一串日期。

我在Stack Overflow上仔细研究了这个主题。我还尝试了map函数np.datetime64并读取列表而不是字符串,但引用了no attribute 'year'时出现了不同的错误。

我真的很感激任何帮助,因为我的想法已经不多了。

import datetime
from datetime import datetime
import julian
import solar
from solar import *
import os
import csv

# Create lists to hold the records.
dates = []

# Navigate to correct directory
os.chdir('D:\\Di_Python')

filename = 'SPA timestamp small.csv'

# Read through the entire file, skip the first line
with open(filename) as f:
    # Create a csv reader object.
   reader = csv.reader(f)

# Ignore the header row.
   next(reader)

# Store the dates in the appropriate list.
   for row in reader:
      dates.append(row)
      print row

    # Change list to string so can use a function on it
   lines = []
   for date in dates:
      lines.append('\t'.join(map(str, date)))
      result = '\n'.join(lines)
      print result

   minutes = []
   minutes.append(datetime.datetime.strptime(result,'%d/%m/%Y %H:%M'))

# Inputs
latitude_deg = 52.8
longitude_deg = -1.2
elevation = 0

# i should be 52560 - 10 min interval whole year
for i in minutes:
        utc_datetime = i
        altitude = solar.GetAltitude(latitude_deg, longitude_deg, utc_datetime)
        altitude_list.append(altitude)
        print altitude_list

2 个答案:

答案 0 :(得分:0)

首先,代码没有正确缩进,因此难以猜测。

我认为datetime.datetime.strptime的输入不正确。您可以使用result创建'\n'.join(...),但格式字符串不包含'\n'。从我的日期列表中创建一个字符串对我来说似乎没什么用。

我认为你想要的是:

for date in dates:
    minutes.append(datetime.datetime.strptime(date, '%d/%m/%Y %H:%M'))

请注意,您用于列表的名称具有误导性,因为minutes包含datetime.datetime个对象而不是分钟值!

答案 1 :(得分:0)

非常感谢Vikramis和Lutz Horn的帮助和评论。在尝试使用Vikramis'代码,我实现了一个我在下面复制的工作版本。

我的错误发生在第40行:

minutes.append(datetime.datetime.strptime(result,'%d/%m/%Y %H:%M'))

我发现我需要从列表中创建一个字符串以避免以下错误" TypeError:必须是字符串,而不是列表"。我现在通过使用(str(date)替换for循环并希望使用更明智的名称来整理它。

我的问题在于格式化。它需要 " ['%d /%m /%Y%H:%M']" 因为我正在访问列表中的项目,而不是比"'%d /%m /%Y%H:%M'" 在单个日期的shell中有效。

import datetime
from datetime import datetime
import julian
import solar
from solar import *
import os
import csv

# Create lists to hold the records.
dates = []
datetimeObj = []
altitude_list = []

# Navigate to correct directory
os.chdir('D:\\Di_Python')

filename = 'SPA timestamp small.csv'

# Read through the entire file, skip the first line
with open(filename) as f:
    # Create a csv reader object.
    reader = csv.reader(f)

# Ignore the header row.
    next(reader)

# Store the dates in the appropriate list.
    for row in reader:
        dates.append(row)
        print row     

    # Change format to datetime
    # str(date) used to avoid TypeError: must be string, not list
    for date in dates:
        datetimeObj.append(datetime.datetime.strptime(str(date),"['%d/%m/%Y %H:%M']"))

    for j in datetimeObj:
        print j

# Inputs
latitude_deg = 52.8
longitude_deg = -1.2
elevation = 0

# i should be 52560 - 10 min interval whole year
for i in datetimeObj:
        utc_datetime = i
        altitude = solar.GetAltitude(latitude_deg, longitude_deg, utc_datetime)
        print altitude
        altitude_list.append(altitude)
# print altitude_list