我想阅读日期的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
答案 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