从文本文件分配给变量

时间:2018-11-15 13:13:29

标签: python-3.x

我有这段文字:

(empty line)
(empty line)
7 -1 -2 
2 -2
(empty line)
-6 2 -5 8
(empty line)
(empty line)
(3, 2), (6,4), 
(2,8), (3,4), (0,6),
(6,6), (7,2)
(empty line)
(empty line)

偶尔会有空行。

我写的是

with open(txt,encoding='utf8')as f:
    text = f.read().strip()
t = [i.replace(" ", "") for i in text.splitlines() ]

它给了我

['7-1-2', '2-2', '', '-62-58', '', '', '(3,2),(6,4),', '(2,8),(3,4),(0,6),', '(6,6),(7,2)']

我想分配给3个不同的变量:

d1 = [7,-1,-2,2,-2]
d2 = [-6,2,-5,8]
sets = [(3,2),(6,4),(2,8),(3,4),(0,6),(6,6),(7,2)]

4 个答案:

答案 0 :(得分:2)

添加到@DocDriven做的事情:

with open('testt.txt',encoding='utf8')as f:
    text = f.read().strip()
t = [i.split(" ") for i in text.splitlines() if len(i)>0 ]

def findTuple(input):
    input = "".join(["".join(i) for i in input])
    pairs = input.replace("),","|").replace("(","").replace(")","").split("|")
    tuples=[]
    for pair in pairs:
        tuples.append(tuple(map(int,pair.split(","))))
    return tuples

d1 = [list(map(int,i)) for i in  t[:2]]
d2 = [int(i) for i in  t[2]]
sets = findTuple(t[3:])

将导致:

d1= [[7, -1, -2], [2, -2]]
d2= [-6, 2, -5, 8]
sets= [(3, 2), (6, 4), (2, 8), (3, 4), (0, 6), (6, 6), (7, 2)]

答案 1 :(得分:1)

这不是最简洁的解决方案,但是由于它是动态的,因此具有灵活性,可以轻松更改以处理新的和/或附加的数据。

# (Already exists)
t = ['7-1-2', '2-2', '', '-62-58', '', '', '(3,2),(6,4),', '(2,8),(3,4),(0,6),', '(6,6),(7,2)']
# ----------------
dataCount = 3 # adjust this according to how many groups of data are expected (if known)

values = ['' for _ in range(dataCount)]
i = 0
for e in lst:
    values[i] = values[i] + e # append the new data to the element
    if e == "" and values[i] != "": # advance to new element but ignore repeat "nulls"
        i = i + 1

# various ways of displaying the data:
print (values)
for e in values:
    print (e)

print (values[0], values[1], values[2])

输出:

['7-1-22-2', '-62-58', '(3,2),(6,4),(2,8),(3,4),(0,6),(6,6),(7,2)']
7-1-22-2
-62-58
(3,2),(6,4),(2,8),(3,4),(0,6),(6,6),(7,2)
7-1-22-2 -62-58 (3,2),(6,4),(2,8),(3,4),(0,6),(6,6),(7,2)

我将每组数据分配给自己的列表元素,而不是单独的变量。

答案 2 :(得分:0)

尝试一下(注意所有变量都是字符串,而不是集合列表):

d1 = "".join(t[:2])
d2 = t[3]
sets = "".join(t[6:])

答案 3 :(得分:0)

感谢大家对我的帮助,非常感谢@Ctrl S,我解决了问题。

10.0.2.15:8080

要将集合转换为元组,我只使用了eval()。