我正在尝试编写一个从“延迟”目录中读取文件的函数,该目录包含包含列表的文件。以下是延迟文件夹中的文件包含的内容:
'173378981', '45000', '343434', '3453453', '34534545', '3452342', '234234', '42063008', 'Exempted', '10000'
'1000014833', '0', '0', '0', '0', '0', '0', '0', 'Exempted', '0'
'1000009598', '0', '0', '0', '0', '0', '0', '0', 'Exempted', '0'
'279483421', '0', '0', '0', '0', '0', '0', '0', 'Exempted', '0'
'1000009600', '0', '0', '0', '0', '0', '0', '0', 'Exempted', '0'
'389453080', '0', '0', '0', '0', '0', '0', '0', 'Exempted', '0'
'1000009602', '0', '0', '0', '0', '0', '0', '0', 'Exempted', '0'
用于写入文件的函数:
def storeDeferredRecords(records):
"""docstring for createFile"""
now = datetime.datetime.now()
filename = deferredDir + '/' + now.strftime("%Y%m%d-%H%M%S")
f = open(filename, 'w')
newlist = map(lambda(x): str(x)[1:-1], records)
for item in newlist:
f.write("%s\n" % item)
f.close
我需要有关用于读取文件的函数的帮助。我只能写这个:
def getDeferredRecords():
"""docstring for getDeferredRecords"""
infiles = [infile for infile in glob.glob(deferredDir + '/*')]
<code to read the contents of each file here>
有人可以帮帮我吗?我需要阅读这些行并将它们插入列表中。然后,该列表将与来自单独CSV文件的记录合并。
答案 0 :(得分:2)
首先,商店功能的最后一行必须像f.close()
您的商店功能以换行符分隔的方式保存值。要阅读所有文件,应该足够了:
def getDeferredRecords():
"""docstring for getDeferredRecords"""
return dict((infile, list(iter(file(infile))))
for infile in glob.glob(deferredDir + '/*'))
说明:文件是可迭代的,因此您可以执行for line in file: print line
。使用list(iter(file))
,您可以在列表中包含文件行。 dict((a, b) for a, b in foo)
会返回包含{a: b}
对的字典。函数的返回值是格式为{filename: list_of_lines_in_file}
的字典。请记住,列表元素是带有尾随换行符的字符串。
答案 1 :(得分:1)
请参阅the csv
module:
BigList = []
for filename in glob.glob(deferredDir + '/*'):
PartList = csv.reader(open(filename))
BigList.extend(PartList)
这是你的想法吗?
答案 2 :(得分:1)
Python cvs
模块可能是一个很好的答案:
http://docs.python.org/library/csv.html
<强>问题:强>
glob.glob()
已经返回一个可迭代的,所以我在这里看不到这一点...
[infile for infile in glob.glob(deferredDir + '/*')]
相反:
BigList = []
for filename in glob.glob(deferredDir + '/*'):
#CVS read code here
#add to BigList
深思熟虑。
答案 3 :(得分:0)
结合Tim Pietzcker的想法,以下是重写函数:
def storeDeferredRecords(records):
"""docstring for createFile"""
now = datetime.datetime.now()
filename = deferredDir + '/' + now.strftime("%Y%m%d-%H%M%S")
f = csv.writer(open(filename, 'w'), delimiter=',')
f.writerows(records)
def getDeferredRecords():
"""docstring for getDeferredRecords"""
for filename in glob.glob(deferredDir + '/*'):
def_records = csv.reader(open(filename,'r'))
records.extend(def_records)
我使用csv.writer而不是使用前面的代码块:
f = open(filename, 'w')
newlist = map(lambda(x): str(x)[1:-1], records)
for item in newlist:
f.write("%s\n" % item)
f.close
感谢所有回复的人!