将文件作为元组列表读取

时间:2015-01-22 14:17:36

标签: python

我想用Python阅读文本文件。我的清单必须是这样的:

mylist = [(-34.968398, -6.487265), (-34.969448, -6.488250),
          (-34.967364, -6.492370), (-34.965735, -6.582322)]

我的文字文件是:

-34.968398,-6.487265
-34.969448,-6.488250
-34.967364,-6.492370
-34.965735,-6.582322

我的Python代码:

f = open('t3.txt', 'r')
l = f.readlines()
print l

我的结果:

['-34.968398 -6.487265\n', '-34.969448 -6.488250\n', 
 '-34.967364 -6.492370\n', '-34.965735 -6.582322\n']

3 个答案:

答案 0 :(得分:14)

读取这样的分隔数据的最有效方法之一是使用numpy.genfromtxt。例如

>>> import numpy as np
>>> np.genfromtxt(r't3.txt', delimiter=',')
array([[-34.968398,  -6.487265],
       [-34.969448,  -6.48825 ],
       [-34.967364,  -6.49237 ],
       [-34.965735,  -6.582322]])

否则,您可以使用列表推导逐行阅读,在','上拆分,将值转换为float,最后生成tuple

列表
with open('t3.txt') as f:
    mylist = [tuple(map(float, i.split(','))) for i in f]

请注意,当您使用with打开文件时,它会在事后关闭,因此您不必这样做。

答案 1 :(得分:6)

是的,Cyber​​解决方案是最好的。

适合初学者

  1. 以读取模式读取文件。
  2. readlines()readline()
  3. 迭代行
  4. 使用split(",")方法按'
  5. 分割
  6. 使用floatstring值转换为float。或者我们也可以使用eval()
  7. 使用list append()方法将元组追加到列表中。
  8. 使用try除了防止代码中断。
  9. 代码:

    p = "/home/vivek/Desktop/test.txt"
    result = []
    with open(p, "rb") as fp:
        for i in fp.readlines():
            tmp = i.split(",")
            try:
                result.append((float(tmp[0]), float(tmp[1])))
                #result.append((eval(tmp[0]), eval(tmp[1])))
            except:pass
    
    print result
    

    输出:

    $ python test.py 
    [(-34.968398, -6.487265), (-34.969448, -6.48825), (-34.967364, -6.49237), (-34.965735, -6.582322)]
    

    注意:readline()从文件中读取一行。

答案 2 :(得分:-1)

此代码应该这样做:

ifile=open("data/t2mG_00", "r")
lines=ifile.readlines()
data=[tuple(line.strip().split()) for line in lines]
print(data[0])