直到最近,这段代码才起作用。我添加了一个函数,提示用户输入一个文件名和扩展名,但是这不起作用,所以我求助于这个版本。现在,当我尝试运行它时,我得到了这个:
Traceback (most recent call last):
File "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Parser/Single_File_Multistep_Counter.py", line 53, in <module>
main()
File "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Parser/Single_File_Multistep_Counter.py", line 51, in main
writer(final_counts(intermediate_count))
File "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Parser/Single_File_Multistep_Counter.py", line 31, in final_counts
for file_path in intermediate_file_list:
TypeError: 'function' object is not iterable我还不完全确定错误意味着什么,在研究之后,我只能找到python object not iterable error in function和python3 TypeError: 'function' object is not iterable,它们不能解决我的问题。
下面是给我错误的代码:
def final_counts(intermediate_file_list):
date_list = {}
for file_path in intermediate_file_list:
with open(file_path, "r") as f:
for line in f:
tockens = line.split(",")
if tockens[0] in date_list:
date_list[tockens[0]] = date_list[tockens[0]] + tockens[1]
else:
date_list[tockens[0]] = tockens[1]
return date_list如果需要的话,我将在以后的编辑中发布完整的代码。任何详细的答案解释我需要改变什么将是非常有帮助的,我想学习语言和我做错了什么,所以(希望)以后我不会犯同样的错误。
编辑:这里是我的全部代码
import os, glob, csv
location = "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Data Files"
columnname = "smcn"
timecolumn = ""
filetype = ".processed"
def intermediate_count(location, filetype):
intermediate_file_list = []
for file_path in list(glob.glob(os.path.join(location, "*" + filetype))):
date_list = {}
print file_path
with open(file_path, 'r') as f:
for line in f:
tockens = line.split(",")
key = tockens[9] + "/" + tockens[15][:-4] #replace col_positon to 9 if necessary
if key in date_list:
date_list[key] = date_list[key] + 1
else:
date_list[key] = 1
with open(file_path + ".count", "w") as csv:
for item in date_list:
csv.write(item + "," + str(date_list[item]) + "\n")
intermediate_file_list.append(file_path + ".count")
return intermediate_file_list
def final_counts(intermediate_file_list):
date_list = {}
for file_path in intermediate_file_list:
with open(file_path, "r") as f:
for line in f:
tockens = line.split(",")
if tockens[0] in date_list:
date_list[tockens[0]] = date_list[tockens[0]] + tockens[1]
else:
date_list[tockens[0]] = tockens[1]
return date_list
def writer(date_list):
directory = location + "/" + "Total"
if not os.path.exists(directory):
os.makedirs(directory)
with open(directory + "/" + "Total.processed", "w") as f: # Lots of commas!
writer = csv.writer(f, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
for key, value in date_list.items():
writer.writerow(str([key]) + str(value))
def main():
writer(final_counts(intermediate_count))
main()发布于 2015-07-10 16:55:03
在黑暗中开枪:
intermediate_count是您创建的一个助手函数,它返回一个可迭代的。
解决方案(如果我的猜测是正确的),您需要调用函数(),否则您正在传递函数对象本身,这是错误告诉您的。
writer(final_counts(intermediate_count(location, filetype)))
^发布于 2015-07-10 18:51:03
将main函数更改为如下所示:
def main():
writer(final_counts(intermediate_count(location, filetype))或者,您也可以这样写:
def main():
writer(final_counts(intermediate_count())然后改变这个:
def intermediate_count(location, filetype):取而代之的是:
def intermediate_count():https://stackoverflow.com/questions/31346261
复制相似问题