我正在尝试删除空格并从列表中输入,我需要将其作为坐标导入。然而,这似乎不起作用。给出以下错误:
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
先谢谢大家的帮助!
答案 0 :(得分: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]
答案 1 :(得分: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解析器。
答案 2 :(得分:0)
coordList
是两元素列表的列表。
如果您希望这样,那么strip
行应为:
coordList2 = [[x[0].strip(' '), x[1].strip(' ')] for x in coordList]
答案 3 :(得分:0)
coordList
这里有2个级别,所以你应该做类似的事情:
coordList2 = [[a.strip(' '), b.strip(' ')] for a, b in coordList]
但是比a
和b
更具描述性的名称可能会很好!
答案 4 :(得分: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()
方法。
答案 5 :(得分: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