从文本文件创建简单元组

时间:2016-10-21 19:54:51

标签: python python-3.x tuples

假设我有一个包含以下内容的文本文件:

50 8 2 DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB

我的目标是创建一个从文本文件中读取并以下列格式返回元组的函数:

(50, 8, 2, "DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB")

3 个答案:

答案 0 :(得分:1)

您可以手动构造具有整数转换的元组:

def foo(filename):
    with open(filename) as file:
        t = file.read().split()
    return (int(t[0]), int(t[1]), int(t[2]), t[3])

或者如果你想要花哨:

    return tuple(list(map(int, t[:3])) + [t[3]])

可以在Python 2中省略list调用。

或者:

    return tuple(f(x) for x, f in zip(t, (int, int, int, str)))

答案 1 :(得分:0)

使用split函数将字符串拆分为字符串元组。 int函数将尝试解析它,如果不能这样做,则会ValueError。然后try/except块将捕获错误,而不是传递原始字符串。

def tuple_parser(text):
    raw_parts = text.split()
    parsed_parts = []
    for raw_part in raw_parts:
        try:
            parsed_part = int(raw_part)
        except ValueError:
            parsed_part = raw_part
        parsed_parts.append(parsed_part)
    return tuple(parsed_parts)


def tuple_file_parser(filename)
    with open(filename, 'r') as f:
        text = f.read()
        return tuple_parser(text)

如果您的文件中有多行,则可以循环调用tuple_parser。迭代file对象一次返回一行:

with open(filename, 'r') as f:
    tuples = [tuple_parser(line) for for line in f]

答案 2 :(得分:0)

你可以通过一行传递到tuple

一般地在一行中支持(支持int和字符串)
the_tuple = tuple(int(x) if x.isdigit() else x for x in z.split())

只适用于正整数,如果你想要负数,可以完成但是1-liner更加丑陋:

the_tuple = tuple(int(x) if x.isdigit() or (x and x[0]=='-' and x[1:].isdigit()) else x for x in z.split())