读取操作字符串的简单数据文件。

时间:2017-11-09 02:03:36

标签: python

如果我给出了:

 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'

调试时,我可以看到我需要去除字符串,以便它不会在'上执行操作。端'

我现在已经尝试了几个小时的不同代码,但没有取得任何进展。

这部分的任何提示?

谢谢!

2 个答案:

答案 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)
  1. l = li.split(',')转向l = li.split(', '),同时使用,将字符串拆分为列表
  2. 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中运行。我添加了一个适当的上下文管理器来打开文件,你应该总是这样做。