I need to read tuples from a txt. I tried with numpy (using genfromtxt) but it didn\'t work (or at least, I don\'t know how). This is is my txt:
(0,0) (0,0)
Here's a simple way without using any libraries:
tuples = []
for t in open('input.txt').read().split():
a, b = t.strip('()').split(',')
tuples.append((int(a), int(b)))
List comprehension equivalent:
[tuple(int(i) for i in t.strip('()').split(',')) for t in open('input.txt').read().split()]
With input.txt
being the data provided in the question, this is the output:
[(0, 0), (0, 0), (1, 0), (2, 3), (1, 0), (1, 1), (1, 1), (3, 3), (2, 0), (1, 2), (2, 1), (4, 4), (3, 0), (2, 2), (3, 1), (5, 5)]
You can try regular expression too here:
import re
pattern='\((\d+,\d)\)'
with open('demo.txt','r') as f:
for line in f:
data=re.findall(pattern,line)
data_1=[]
for item in data:
data_1.append(tuple(map(lambda x:int(x),item.split(','))))
if data_1:
print(data_1)
output:
[(0, 0), (0, 0), (1, 0), (2, 3)]
[(1, 0), (1, 1), (1, 1), (3, 3)]
[(2, 0), (1, 2), (2, 1), (4, 4)]
[(3, 0), (2, 2), (3, 1), (5, 5)]
Or even better:
import re
pattern='\((\d+,\d)\)'
with open('demo.txt','r') as f:
for line in f:
data=re.findall(pattern,line)
data_1=[tuple(map(lambda x:int(x),item.split(','))) for item in data]
if data_1:
print(data_1)
You can try this one, although it does not use the numpy
library:
from ast import literal_eval as createTuple
tupleList = []
with open("test.txt","r") as infile:
for line in infile:
line = line.split()
for l in line:
tupleList.append(createTuple(l))
print(tupleList)
Format of input file:
(0,0) (0,0) (1,0) (2,3)
(1,0) (1,1) (1,1) (3,3)
(2,0) (1,2) (2,1) (4,4)
(3,0) (2,2) (3,1) (5,5)
Output (list of tuples):
[(0, 0), (0, 0), (1, 0), (2, 3), (1, 0), (1, 1), (1, 1), (3, 3), (2, 0), (1, 2), (2, 1), (4, 4), (3, 0), (2, 2), (3, 1), (5, 5)]