我用python将两个二维列表保存到一个文件中,现在我想将此字符串恢复到两个列表中,但是不知道如何在不进行很多混乱拆分的情况下很好地做到这一点。有解决此问题的功能吗?
文件(lists.txt)如下:
[['someting1', 'someting2', 'someting3', 'someting4'], ['someting else1', 'someting else2', 'someting else3', 'someting else4']]
[['different1', 'different2', 'different3'], ['wow is this different1', 'wow is this different2', 'wow is this different3']]
这应该转换成二维列表,结果看起来像这样
print(listForLine1[1][1]) >> 'someting else2'
print(listForLine1[0][2]) >> 'different3'
谢谢 维姆
编辑:
我发现将列表另存为文本并不是一个好主意,因为特殊字符(如'和')可能会导致将文本再次转换回列表时变得复杂。
对此更好的解决方案是使用pandas数据框,将其保存到csv中,然后可以使用pandas重新打开。
示例:
import pandas as pd
dataToAdd = [["test","test"]["test","test"]]
df = pd.DataFrame(data=dataToAdd)
file = open("filetowriteto", 'w+')
file.write(df.to_csv())
答案 0 :(得分:0)
尝试使用
json.load(file_obj)
或
json.loads(str_obj)
为此,您将必须使用
导入JSON。import json
请记住,在文件中写入文本时,请使用双引号(“)而不是单(')。
这将从文件中将字符串作为字典/列表对象加载。 希望这可以帮助。 欢迎使用Stack Overflow! :)
答案 1 :(得分:0)
In [734]: alist1 = [['someting1', 'someting2', 'someting3', 'someting4'], ['someting else1', 'someting else2', 'someting else3', 'someting else4']]
In [735]: str(alist1)
Out[735]: "[['someting1', 'someting2', 'someting3', 'someting4'], ['someting else1', 'someting else2', 'someting else3', 'someting else4']]"
可以使用csv
将类似的列表另存为savetxt
:
In [736]: np.savetxt('strings.txt',alist1, delimiter=',', fmt='%s')
In [737]: cat strings.txt
someting1,someting2,someting3,someting4
someting else1,someting else2,someting else3,someting else4
我本可以指定格式字段的宽度来对齐列。
还选择文本中未出现的定界符。
在任何情况下,都可以使用genfromtxt
加载该文件。 (熊猫csv阅读器也可以使用)。
In [738]: np.genfromtxt('strings.txt', delimiter=',', dtype=str)
Out[738]:
array([['someting1', 'someting2', 'someting3', 'someting4'],
['someting else1', 'someting else2', 'someting else3',
'someting else4']], dtype='<U14')
通常以ndarray
格式书写和阅读列表或str
并不是一个好主意。解析可能会更加困难,甚至是不可能的。该格式用于人类可读性,而不是机器解析。
另一个答案表明,json
是列表(和字典)的不错选择。