假设我有一个名为“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
但这只返回最后两个数字。这里出了什么问题?
答案 0 :(得分:3)
根据您的评论,这表示您确实混合tab
和space
缩进导致您的问题。我可以建议您对代码进行一些小的更改,因为我可以看到您正在考虑使用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
然后你的代码是正确的,它确实有效。