我正在尝试阅读.csv
文件并添加相应月份的值。
例如,如果我的文件有3年的数据,我想找到与这些3年中的1月相对应的值的总和。
文件示例:
jan2000,4.5
feb2000,9
jan2001,9.0
feb2001,8.9
依旧......
我知道如何打开文件并使用list
和split
将文件转换为strip
。
我不明白如何将特定元素附加到列表中,因为我的数据已经有近50年的时间了,而且对于if语句来说这是一个愚蠢的想法。
答案 0 :(得分:0)
import csv # let's let the csv module handle the details of reading a csv file
import collections # we'll need a defaultdict to track all the data
# open the file we want to read from and the file we want to write to
with open("path/to/input") as infile, open("path/to/output", 'w') as fout:
outfile = csv.writer(fout, delimiter=',') # let the csv library handle csv.writer handle the details of writing the actual data to the file
months = collections.defaultdict(int) # keep track of the input data
for month, val in csv.reader(infile, delimiter=','):
val = float(val)
month = month[:3] # we don't need the year
months[month] += val # add to the running total
for month in 'jan feb mar apr may jun jul aug sep oct nov dec'.split(): # we need a list of all the months in proper order
outfile.writerow([month, months[month]) # get the value from the data we've been tracking
答案 1 :(得分:0)
可以使用open
,strip
和split
函数来阅读CSV文件,可以说使用module like this会更直接。
然后读取CSV变为:
import csv
with open('fiftyyears.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
do_something(row)
我不确定使用if语句是什么愚蠢,但你列出的日期格式有点奇怪。此外,10行真实数据对于帮助回答您的问题会更有用。
有很多方法可以解决您的月份关联要求。一个基本的方法是:
import csv
class MonthCorrelator(object):
def __init__(self, month):
self.month = month
def process(self, row):
# code goes here to say "if the row's month is my month then..."
def finish(self):
# code goes here to print the result
processor = MonthCorrelator('jan2000') # or, better, use datetime
with open('fiftyyears.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
processor.process(row)
processor.finish()
......哪种方法可行,但代码可能比你需要的多。
如果你想做的只是
答案 2 :(得分:0)
如果你想自己完成所有繁重的工作,而不需要从标准库中获得太多帮助:
<div class="relativeWrap" ng-repeat="phone in phonenumbers">
<input placeholder="Phone Number" pattern="[0-9]{10}" ng-maxlength="10" maxlength="10" type="text" class="form-control input-text phone_number" name="phonenumber[]" ng-model="phone.text" ng-required="!isValue" ng-change="textChange">
</div>
答案 3 :(得分:0)
没有其他方法可以找到除了扫描每个元素之外你需要的元素&#34; jan&#34;
计算机非常快,这是一种O(n)复杂度的操作(并不复杂)。假设您将CSV文件解析为月份和值列表
,我认为您的答案看起来像这样isJan = False
sum = 0.0
for item in monthList:
if isJan:
sum += float(item)
if "jan" in item:
isJan = True
else:
isJan = False
print sum