读取csv文件的每25行,并使用python传递给列表
我想读取一个文件,并将该文件的每25行转换为一个列表,也就是说,对于一个文件的100行,它应该有4个列表,每个列表中有25个项目。我无法获取此问题的代码。 输入文件如下所示,实际上它有100行:读取csv文件的每25行,并使用python传递给列表,python,list,csv,reader,Python,List,Csv,Reader,我想读取一个文件,并将该文件的每25行转换为一个列表,也就是说,对于一个文件的100行,它应该有4个列表,每个列表中有25个项目。我无法获取此问题的代码。 输入文件如下所示,实际上它有100行: {'PutRequest': {'Item': {'id': {'S': 'E1DBEAE3'}, 'value': {'M': {'result': {'N': u'0.0015'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}} {'PutRequest':
{'PutRequest': {'Item': {'id': {'S': 'E1DBEAE3'}, 'value': {'M': {'result': {'N': u'0.0015'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}
{'PutRequest': {'Item': {'id': {'S': '31C6C'}, 'value': {'M': {'result': {'N': u'0.1129'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}
{'PutRequest': {'Item': {'id': {'S': '59D40'}, 'value': {'M': {'result': {'N': u'0.00129'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}
{'PutRequest': {'Item': {'id': {'S': 'A2A9'}, 'value': {'M': {'result': {'N': u'0.05129'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}
另外,我想分别在每个列表的第一个元素和最后一个元素前加一个字符串,如:
'{"test":[' and append string like: ']}'
在prepend和append之后,列表大小应为3,例如:
{"test":[{'PutRequest': {'Item': {'id': {'S': 'E1DBEAE3'}, 'value': {'M': {'result': {'N': u'0.0015'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}
{'PutRequest': {'Item': {'id': {'S': '31C6C'}, 'value': {'M': {'result': {'N': u'0.1129'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}
{'PutRequest': {'Item': {'id': {'S': '59D40'}, 'value': {'M': {'result': {'N': u'0.00129'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}
{'PutRequest': {'Item': {'id': {'S': 'A2A9'}, 'value': {'M': {'result': {'N': u'0.05129'}, 'lastupdatedtime': {'S': '2019-06-20'}}}}}}]}
我尝试过以下代码:
from itertools import islice
list =[]
with open('output_of_json.json', 'r') as infile:
lines_gen = islice(infile, 25)
for line in lines_gen:
list.append(line)
无法通过文件的前25行这可以成为一个函数。从逻辑上讲,这就是你想要的。您可以使用enumerate来清理它
with open(filename,'r') as f:
counter = 25
iteration = -1
out_dict = {}
for i in f.readlines():
if counter == 25:
if out_dict[iteration]:
# append your list
out_dict[iteration].append('string here')
counter = 0
iteration += 1
# create new instance and pre-pend
out_dict[iteration] = ['string here']
out_dict[iteration].append(i)
请看中的grouper函数
请注意,如果最后一块行少于25行,则该代码将用空行填充这25行。到目前为止您尝试了什么?您尝试了什么吗?你到底被困在哪里?从itertools导入islice list=[]和openfilename,“r”作为infle:lines\u gen=ISLICEinfle,25作为行中的行\u gen:list.appendline无法再深入前25行@G.Anderson@mureinike请将你的代码放在编辑过的问题中,不要放在注释中。@shalini,isliceinfle,25将迭代文件的前25行。它会将这25行切掉并进行迭代,所以难怪你不能通过前25行。你需要调用ast.literal\u eval将这行解析到字典中。@Barmar:我不确定提问者想要完成什么。我只是演示了如何将行分组成25行的块。但是谢谢你的评论,我稍微修改了我的代码,使之更一般。问题的这一部分呢:另外,我想分别在每个列表的第一个元素和最后一个元素前面加上一个字符串,像
import itertools
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return itertools.zip_longest(*args, fillvalue=fillvalue)
from itertools import islice
list =[]
with open('output_of_json.json', 'r') as infile:
lines_gen = grouper(infile, 25, fillvalue='')
for line in lines_gen:
# whatever you want to do