如果我给出了:
point_loads, 3, 500
point_loads, 6, 900
point_loads, 12, 300
此代码:
for line in open("Input.txt"):
li=line.strip()
if li.startswith("point_load"):
l = li.split(',')
for num in l[1:]:
num = float(num.strip())
point_loads.append(num)
打印:
point_loads = [3, 500, 6, 900, 12, 300]
我正在尝试修改它,以便如果我给出:
length = 32
point_loads, 3, 500
point_loads, 6, 900
point_loads, end, 300
它将设置'结束'等于32(或可变长度),以便输出:
point_loads = [3, 500, 6, 900, 32, 300]
我尝试了一些不同的东西,这是我最新的......
for line in open("Input.txt"):
li=line.strip()
if li.startswith("point_load"):
l = li.split(',')
for num in l[1:]:
if num == 'end':
num = 10
num = float(num.strip())
point_loads.append(num)
但是它给了我错误:(加上它不会真正做到我想要的,但这是一个开始)
num = float(num.strip())
ValueError: could not convert string to float: 'end'
调试时,我可以看到我需要去除字符串,以便它不会在'上执行操作。端'
我现在已经尝试了几个小时的不同代码,但没有取得任何进展。
这部分的任何提示?
谢谢!
答案 0 :(得分:1)
我不确定。但它可能是你想要的吗?
for line in open("Input.txt"):
li = line.strip()
if li.startswith("point_load"):
l = li.split(', ')
for num in l[1:]:
if num == 'end':
num = '10'
num = float(num.strip())
point_loads.append(num)
l = li.split(',')
转向l = li.split(', ')
,同时使用,
和
将字符串拆分为列表num = 10
转向num = '10'
使所有元素都是要调用的字符串strip()
答案 1 :(得分:0)
如果我理解你的问题,你就无法交换字符串' end'用你选择的变量。根据您所说的,它是因为您没有首先正确匹配字符串。当您用逗号分割行时,您仍然会为每个项目获得空格。
'point_loads, end, 300'.split()
最终为“[' point_loads','结束',' 300']
为了解决这个问题,我会首先过滤你的行,以便在拆分后从每个项目中删除所有空格。然后,当您测试if num == 'end'
时,您将获得True
。您当前的代码正在测试if 'end' == ' end'
False
。
point_loads = []
with open(path, 'r') as f:
for line in f:
li = line.strip()
if li.startswith("point_load"):
l = li.split(',')
l = [x.strip() for x in l] # strip whitespace from each item
for num in l[1:]:
if num == 'end':
num = 10.
else:
num = float(num.strip())
point_loads.append(num)
我注意到你的问题的第二部分与Python的性质和鸭子打字有关。您试图在整数和字符串上调用字符串方法strip()。在上面的代码中,如果它匹配你的字符串,它会分配一个int,否则它会将字符串转换为int,从而避免尝试在int上调用strip的问题。
编辑我修复了代码 - 我在列表理解中输了一个拼写错误并使用了split()
而不是strip()
。我在python3.6中对此进行了测试,但它也应该在python2.7中运行。我添加了一个适当的上下文管理器来打开文件,你应该总是这样做。