首页 > 解决方案 > 将字符串列表从文本文件转换为 int 数组

问题描述

{'00': ['000011110000111111110000',
        '000011110000111111110000',
        '000011110000111111110000',
        '000010000000111000000000',
        '111110000111111000000111',
        '111110000111111000000111',
        '111110000111111000000111',
        '111001111111111000000111',
        '000001110000000000000111',
        '000011110000000011111111',
        '000011110000000011111111',
        '000011110000000011111111',
        '111111110000000011110000',
        '111111110000000011110000',
        '111111110000000011110000',
        '111000000000000010000000',
        '111000000111111110000111',
        '111000000111111110000111',
        '111000000111111110000111',
        '111000000111111001111111',
        '000000000111000001110000',
        '000011111111000011110000',
        '000011111111000011110000',
        '000011111111000011110000'],
 '01': ['01111111000000',
        '01111111000000',
        '01111111000000',
        '01110000000000',
        '01110000000000',
        '01110000000000',
        '11110000000111',
        '11110000000111',
        '11110000000111',
        '00000000000111',
        '00000111111111'],
 '02': ['0000111100',
        '0000111000',
        '1111111001',
        '0000000111',
        '0000000111',
        '0000000111',
        '0010000100',
        '0001000100',
        '0000000100',
        '0000000100']}

我有一个看起来像这样的文本文件。我希望输出文件只从字典中提取值并将它们写入另一个数组。而且它应该与它们现在出现的顺序相同。所以 00 的数组应该首先出现,然后是 01,02,依此类推。输出 00-

['000011110000111111110000','000011110000111111110000','000011110000111111110000','000010000000111000000000','111110000111111000000111','111110000111111000000111','111110000111111000000111','111001111111111000000111','000001110000000000000111','000011110000000011111111','000011110000000011111111','000011110000000011111111','111111110000000011110000','111111110000000011110000','111111110000000011110000','111000000000000010000000','111000000111111110000111','111000000111111110000111','111000000111111110000111','111000000111111001111111','000000000111000001110000']

输出 01-

['01111111000000','01111111000000','01111111000000','01110000000000', '01110000000000','01110000000000','11110000000111','11110000000111','11110000000111', '00000000000111','00000111111111']

我尝试使用 json 来解决这个问题,但显然每个元素都是一个列表,它不起作用。

标签: python

解决方案


我很惊讶 Python 的json模块不适合你,所以我将你的输入存储在一个名为的文件中sample.json并自己尝试了。

问题是你的 json 没有按照 Python 期望的方式格式化。它使用单引号(')而不是双引号(")来分隔字符串。在我的文本编辑器中打开文件并用双引号替换所有单引号后,Python3 的json模块对我来说工作得很好。这是我的 Python shell 会话:

>>> import json
>>> with open('./sample.json', 'r') as jfile:
        j = json.load(jfile)

>>> j['02'] 
['0000111100', '0000111000', '1111111001', '0000000111', 00000111',
'0000000111', '0010000100', '0001000100', '0000000100', 000000100']

现在我可以打开输出文件 ( output.json) 并将我的列表写入其中。

>>> with open('./output.json', 'w') as outfile:
        outfile.write(str(j['01'])) # Remember to convert the list to a string!
198

退出 python shell 后,列表就在它所属的位置:

$ cat output.json
['01111111000000', '01111111000000', '01111111000000', '01110000000000', 
'01110000000000', '01110000000000', '11110000000111', '11110000000111', 
'11110000000111', '00000000000111', '00000111111111']

也许您现在想再给json模块一次机会?当然,它的输入有点挑剔。但是,一旦您对它感到满意,它将使您对数据的工作比手动切片和切块更清晰、更简单、更不容易出错。


推荐阅读