3

我正在尝试删除空格并从列表中输入,我需要将其作为坐标导入。但是,这似乎不起作用。给出以下错误:

AttributeError: 'list' object has no attribute 'strip'

目前我仍在考虑删除空格(首先必须删除这些空格,然后再输入)。

有没有人有任何建议为什么这不起作用?

代码如下:

# Open a file
Bronbestand = open("D:\\Documents\\SkyDrive\\afstuderen\\99 EEM - Abaqus 6.11.2\\scripting\\testuitlezen4.txt", "r")
headerLine = Bronbestand.readline()
valueList = headerLine.split(",")
#valueList = valueList.replace(" ","")

xValueIndex = valueList.index("x")
yValueIndex = valueList.index("y")
#xValueIndex = xValueIndex.replace(" ","")
#yValueIndex = yValueIndex.replace(" ","")

coordList = []

for line in Bronbestand.readlines():
    segmentedLine = line.split(",")
    coordList.append([segmentedLine[xValueIndex], segmentedLine[yValueIndex]])

coordList2 = [x.strip(' ') for x in coordList]

print coordList2

其中“Bronbestand”如下:

id,x,y,
      1,  -1.24344945,   4.84291601
      2,  -2.40876842,   4.38153362
      3,  -3.42273545,    3.6448431
      4,  -4.22163963,   2.67913389
      5,   -4.7552824,   1.54508495
      6,  -4.99013376, -0.313952595
      7,   -4.7552824,  -1.54508495
      8,  -4.22163963,  -2.67913389
      9,  -3.42273545,   -3.6448431

提前感谢大家的帮助!

4

6 回答 6

4

看起来你的问题就在这里。该append()方法将单个项目添加到列表中。如果将列表附加到列表,则会得到列表列表。

coordList.append([segmentedLine[xValueIndex], segmentedLine[yValueIndex]])

有两种方法可以解决此问题。

# Append separately
coordList.append(segmentedLine[xValueIndex])
coordList.append(segmentedLine[yValueIndex])

# Use extend()
coordList.extend([segmentedLine[xValueIndex], segmentedLine[yValueIndex]])

或者,如果您打算拥有一个列表列表,则需要深度迭代两个级别。

coordList2 = [[x.strip(' ') for x in y] for y in coordList]
于 2013-01-10T16:24:28.887 回答
1
import csv
buff = csv.DictReader(Bronbestand)

result = []

for item in buff:
    result.append(dict([(key, item[key].strip()]) for key in item if key])) # {'y': '-3.6448431', 'x': '-3.42273545', 'id': '9'}

您的数据是有效的逗号分隔值 (CSV) 尝试使用本机 python csv 解析器。

于 2013-01-10T16:29:55.513 回答
0

coordList是一个二元素列表的列表。

如果你希望它是这样的,你的strip行应该是:

coordList2 = [[x[0].strip(' '), x[1].strip(' ')] for x in coordList]
于 2013-01-10T16:23:43.243 回答
0

coordList这里有 2 层深,所以你应该这样做:

coordList2 = [[a.strip(' '), b.strip(' ')] for a, b in coordList]

但更具描述性的名称比a而且b可能更好!

于 2013-01-10T16:24:22.013 回答
0
for line in Bronbestand.readlines():
    segmentedLine = line.split(",")
    coordList.append(segmentedLine[xValueIndex])
    coordList.append(segmentedLine[yValueIndex])

以前,您将列表附加到coordList,而不是字符串,因为有一个额外的[]对。

这意味着x您的列表理解中的 ( coordList2 = [x.strip(' ') for x in coordList]) 是一个列表,它没有strip()方法。

于 2013-01-10T16:24:30.017 回答
0

您正在将列表附加到您的coordLis.

coordList.append([segmentedLine[xValueIndex], segmentedLine[yValueIndex]])

更好用extend()。例如:

In [84]: lis=[1,2,3]

In [85]: lis.append([4,5])

In [86]: lis
Out[86]: [1, 2, 3, [4, 5]]  # list object is appended

In [87]: lis.extend([6,7])     #use extend()

In [88]: lis
Out[88]: [1, 2, 3, [4, 5], 6, 7]     #6 and 7 are appended as normal elements
于 2013-01-10T16:25:59.273 回答