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

如何提取*.txt文件中的数据并在Python中使用它?,python,import,text-files,Python,Import,Text Files,我有一个将(u,v)转换为(s,d)的Python代码: def d2r(d): r=d*math.pi/180.0 返回(r) def r2d(右): d=r*180.0/math.pi 返回(d) def sd2uv(s、d): r=d2r(d) u=s*math.sin(r) v=s*math.cos(r) 返回(u,v) def uv2sd(u,v): s=math.sqrt((u*u)+(v*v)) r=数学常数2(u,v) d=r2d(r) 如果d

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

def d2r(d):
r=d*math.pi/180.0
返回(r)
def r2d(右):
d=r*180.0/math.pi
返回(d)
def sd2uv(s、d):
r=d2r(d)
u=s*math.sin(r)
v=s*math.cos(r)
返回(u,v)
def uv2sd(u,v):
s=math.sqrt((u*u)+(v*v))
r=数学常数2(u,v)
d=r2d(r)
如果d<0:
d=360+d
返回(s,d)

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

我认为应该这样做:

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

我可以想象两种方法:

  • 将每个文件中的所有数据读取到两个单独的列表中。迭代两个列表并计算每个值,直到到达其中一个列表的末尾
  • 每次从每个文件中读取一行。计算您要查找的值。重复此操作,直到耗尽两个文件
  • 第一点的优点是保存数据以供后续使用(如果需要),而无需再次打开和读取文件。如果文件中有一个非常大的数据集,这可能根本不起作用

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

    第一种方式可能如下所示:

    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提出的方法。

    两个文档中的每一行是否对应另一行?换句话说,第一“U”值与第一“V”值、第二“U”和第二“V”等匹配,作为建议,我会考虑重命名变量u、v、s和d。对于从未见过这段代码的人来说,这可能并不明显。例如,您可以考虑命名为“R2D”“RangsStoTi度”或“RaxsTo-Ox度”。这将帮助像我这样不确定这些值可能意味着什么的人。是的,它们是对应的,谢谢你的建议!虽然OP可能正在读取浮点值,在这种情况下,应该将
    int
    替换为
    float
    。是的,我刚刚做了。谢谢你。
    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)
    
    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