繁体   English   中英

将从文件读取的字符串转换为数组或列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM