加载文本文件python无法将字符串转换为float

时间:2015-06-09 14:59:37

标签: python numpy

我有一个看起来像这样的文本文件:

(1064.2966,1898.787,1064.2986,1898.787,1064.2986,1898.785,1064.2966,1898.785)
(1061.0567,1920.3816,1065.1361,1920.2276,1065.5847,1915.9657,1065.4726,1915.2927,1061.0985,1914.3955,1058.1824,1913.9468,1055.6028,1913.9468,1051.0044,1916.19,1051.5651,1918.8817,1056.0514,1918.9939,1058.9675,1919.6668,1060.8741,1920.4519)

等(所有行都有不同的长度)

当我使用

np.loadtxt(filename,dtype=float,delimiter=',')

我得到了

ValueError: could not convert string to float: (1031.4647

2 个答案:

答案 0 :(得分:5)

我认为np.loadtxt需要数字,因此它不知道如何转换以'('开头的值,我认为你有两个选择:

lines = []
with open('datafile') as infile:
    for line in infile:
        line = line.rstrip('\n')[1:-1]  # this removes first and last parentheses from the line
        lines.append([float(v) for v in line.split(',')])

以这种方式最终得到lines,这是值列表的列表(即lines[0]是第1行上的值列表。)

另一种方法是修改数据文件以删除括号,您可以通过多种方式执行这些操作,具体取决于您正在使用的平台。

例如,在大多数Linux系统中,您可以按照this answer

的方式执行某些操作 编辑:正如@AlexanderHuszagh在评论部分所建议的那样,不同的系统可以有不同的方式来表示换行,因此更强大的解决方案是:

lines = []
with open('datafile') as infile:
    file_lines = infile.read().splitlines()
for line in file_lines:
    lines.append([float(v) for v in line[1:-1].split(',')])

答案 1 :(得分:0)

由于括号,您收到错误,您可以这样替换它:

s = open(filename).read().replace('(','').replace(')','')

返回数组列表:

arrays = [np.array(map(float, line.split(","))) for line in s.split("\n")]