如何在* .txt文件中提取数据并在Python中使用它?

时间:2012-05-02 02:26:12

标签: python import text-files

我有一个Python代码,可以将(u,v)转换为(s,d):

def d2r(d):
  r = d * math.pi / 180.0
  return (r)


def r2d(r):
  d = r * 180.0 / math.pi
  return (d)


def sd2uv(s,d):
  r = d2r(d)
  u = s * math.sin(r)
  v = s * math.cos(r)
  return (u,v)  


def uv2sd(u,v):
  s = math.sqrt((u*u)+(v*v))
  r = math.atan2(u,v)
  d = r2d(r)
  if d < 0:
    d = 360 + d
  return (s,d)

u数据存储在u.txt中,每行有一个数字; v数据存储在v.txt中,每行也有一个数字。我的问题是如何从这两个文件中提取数据,然后在Python代码中使用它们来打印(s,d)?谢谢!

3 个答案:

答案 0 :(得分:3)

我认为应该这样做:

with open('u.txt') as uf, open('v.txt') as vf:
    for u,v in zip(uf,vf):
        print uv2sd(float(u),float(v))

答案 1 :(得分:0)

from itertools import izip, imap
with open('u.txt') as u_data, open('v.txt') as v_data:
    for u,v in imap(float, izip(u_data, v_data)):
        print uv2sd(u, v)

答案 2 :(得分:0)

我可以想象两种方法:

  1. 将每个文件中的所有数据读入两个单独的列表。迭代两个列表并计算每个值,直到到达其中一个列表的末尾。
  2. 一次从每个文件中读取一行。计算您要查找的值。重复,直到你用完两个文件。
  3. 第一点具有保存数据以供后续使用(如果需要)而无需打开和放大的优点。再次阅读文件。如果文件中有非常大的数据集,则可能无法正常工作。

    如果您只需要在程序中使用一次数据,第二点具有节省一些内存的优点。如果您需要重复使用数据,这可能会更慢。

    第一种方式可能如下:

    with open('u.txt') as u_file, open('v.txt') as v_file:
        u_values = u_file.readlines()
        v_values = v_file.readlines()
    
    for u, v in zip(u_values, v_values):
        print uv2sd(float(u), float(v))
    
    # We can use u_values and v_values again if we need to now
    

    第二种方式是Akavall和gnibbler想出来的。