![](/img/trans.png)
[英]Converting a list of ints or floats read from a file to a numpy array
[英]Converting strings read from a file into a array or list
我有python代码,可将数字集生成为数组并将其存储在文件中,该文件如下所示
set([0, 2, 3])
set([0, 1, 3])
set([0, 1, 2])
我还有另一个读取此文件的python代码,需要将文本行转换回数组。
读取文件的方法
def get_sets_from_file (self,file_name):
file_handle = open(file_name, "r")
all_sets_from_file = file_handle.read()
print all_sets_from_file
读取文本行后,我需要一种机制来将文本行转换回数组。
谢谢,
Bhavesh。
编辑1:
根据以下建议,我将文件格式更改为使用逗号分隔的文件
set([8, 6, 7]),
set([8, 5, 7]),
set([8, 4, 7]),
set([8, 3, 7]),
您可以将其应用于文件中的每一行:
>>> line = "set([0, 2, 3])" #or "set([0, 2, 3]),"
>>> import re
>>> r = "set\(\[(.*)\]\)"
>>> m = re.search(r, line)
>>> match = m.group(1)
>>> a = [int(item.strip()) for item in match.split(',')]
>>> a
[0, 2, 3]
>>>
可以在您的代码中实现为:
def get_sets_from_file (self,file_name):
total = []
with open(file_name, "r") as fhdl:
for line in fhdl:
a = do_the_regex_thing_above
total.append(a)
return total
编辑 (基于@Droogans的评论):
如您在新编辑中所描述的那样,此代码可以完美地工作,而无需更改文档的csv版本。
但是,如果您可以访问产生当前输出的代码,则将大大简化该问题。 如果是这种情况,则对数据进行酸洗或json处理会更有效。 这样,您可以简单地通过pickle或json加载生成的输出来恢复列表集
您的文件似乎包含格式正确的python代码。 您可以使用此方法:将文件的每一行读入一个变量(m)
>>> m = "set([1, 3, 2])"
>>> eval(m)
set([1, 2, 3])
>>>
eval被认为是非常危险的,因为它将执行您要求执行的任何操作(例如重新格式化磁盘等)。 但是,由于您知道文件中包含什么内容,因此您可能需要这样做。
如果您只想在文件中读写简单的整数列表:
import os
sets = [
set([0, 2, 3]),
set([0, 1, 3]),
set([0, 1, 2]),
]
def write_sets(path, sets):
with open(path, 'wb') as stream:
for item in sets:
item = ' '.join(str(number) for number in item)
stream.write(item + os.linesep)
def read_sets(path, sets):
sets = []
with open(path, 'rb') as stream:
for line in stream:
sets.append(set(int(number) for number in line.split()))
return sets
path = 'tmp/sets.txt'
write_sets(path, sets)
print read_sets(path, sets)
# [set([0, 2, 3]), set([0, 1, 3]), set([0, 1, 2])]
为什么不将数据序列化为可以从字符串轻松反序列化的数据呢? JSON非常适合这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.