假设我有一个包含以下内容的文本文件:
50 8 2 DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB
我的目标是创建一个从文本文件中读取并以下列格式返回元组的函数:
(50, 8, 2, "DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB")
答案 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
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())