将两列文件读入Python

时间:2015-10-15 08:43:55

标签: python

假设我有一个名为“test.dat”的数据文件,格式为“1 2 \ n 3 4 \ n 5 6”。

如果我运行以下代码,我会得到两个包含数字的数组:

import csv
from numpy           import *
f2 = open('test.dat', 'r') 
lines = f2.readlines()
x = []
y = [] 
for line in lines:
    p = line.split()
    x.append(float(p[0]))
    y.append(float(p[1]))
f2.close() 

print x
print y

但是,我尝试编写

形式的函数
def Read_Two_Column_File(file_name):
    data  = open(file_name, 'r')
    lines = data.readlines()
    x = []
    y = []
    for line in lines:
        p = line.split()
        x.append(float(p[0]))
        y.append(float(p[1]))
    data.close()
    return x, y

x, y = Read_Two_Column_File('test.dat')

print x 
print y

但这只返回最后两个数字。这里出了什么问题?

2 个答案:

答案 0 :(得分:3)

根据您的评论,这表示您确实混合tabspace缩进导致您的问题。我可以建议您对代码进行一些小的更改,因为我可以看到您正在考虑使用csv模块:

版本1 - 使用with确保文件自动关闭

def Read_Two_Column_File(file_name):
    with open(file_name, 'r') as data:
        x = []
        y = []
        for line in data:
            p = line.split()
            x.append(float(p[0]))
            y.append(float(p[1]))

    return x, y

x, y = Read_Two_Column_File('test.dat')

print x 
print y

版本2 - 使用csv模块的可能解决方案

import csv

def Read_Two_Column_File(file_name):
    with open(file_name, 'r') as f_input:
        csv_input = csv.reader(f_input, delimiter=' ', skipinitialspace=True)
        x = []
        y = []
        for cols in csv_input:
            x.append(float(cols[0]))
            y.append(float(cols[1]))

    return x, y

x, y = Read_Two_Column_File('test.dat')

print x 
print y

两个版本都会显示:

[1.0, 3.0, 5.0]
[2.0, 4.0, 6.0]

答案 1 :(得分:0)

如果您的文件看起来像那样

  

$ cat test.dat

     

1 2 \ n 3 4 \ n 5 6

然后你的\ n不是真的\ n,所以readlines()函数返回整行' 1 2 \ n 3 4 \ n 5 6'

您的文件必须如下:

  

$ cat test.dat

     

1 2

     

3 4

     

5 6

然后你的代码是正确的,它确实有效。