如何打开文件并调用函数以解析列表?

时间:2019-11-01 23:28:17

标签: python

我必须遍历给定的文件,其中包含混杂的字母,并取出混杂的整数并将它们附加到新列表中。

我有大部分代码可以运行,但是我看不到我的错误。

我尝试将文件中的行拆分为单独的字符串,然后遍历它们以将其追加到大列表中。我曾尝试使用“ for each”循环,“ for”循环和split函数。

  1. 这是我事先调用的函数。

    此函数接受一个字符串,然后解析该字符串,返回数字列表:

    输入:

    '800!)176^b006$(46$*#63Z*16$*06$z5^'
    

    输出:

    [800, 600, 64, 63, 61, 60]
    
    

    代码:

    lst_num = []
        cur_num = ""
        for char in s:
            if char.isdigit():
                cur_num += char
            elif char == '$' and cur_num:
                lst_num.append(int(cur_num[::-1]))
                cur_num = ""
            elif char == '^':
                cur_num = ""
            elif not char.isdigit() and cur_num:
                lst_num.append(int(cur_num))
                cur_num = ""
        if cur_num:
            lst_num.append(int(cur_num))
        return lst_num
    
  2. 这将获取一个输入文本文件,然后遍历每一行,解析出数字,然后将其添加到单个列表中

    输入:

    '800!)176^b006$(46$*#63Z*16$*06$z5^
     47$ 42^ 18$bj55,
     166^!56'
    

    预期输出:

    [800, 600, 64, 63, 61, 60, 74, 81, 55, 56]
    

    代码:

    def parse_file(filename):
        big_nums = []
        with open(filename, 'r') as f:
            for line in f:
                chars = line.split(',')
                for char in chars:
                     combine = parse_line(char)
                big_nums.append(combine)
    

    实际输出

    [[800, 600, 64, 63, 61, 60], [74, 81, 55], [56]]
    

2 个答案:

答案 0 :(得分:2)

chars是一个列表,因此range(chars)无效。您可能是说range(len(chars)),但直接遍历chars会更容易:

for char in chars:
    big_nums.append(char)

或改用list.extend

big_nums.extend(chars)

但是请注意,这仍然无法提供预期的输出,因为它返回的是字符串列表,而不是整数。

答案 1 :(得分:0)

line.split()(不带参数)仅在空格处分割。您仍然需要删除多余的逗号和右括号。此外,您需要将结果字符串转换为数字。 range(chars)不起作用,因为range期望一个或多个数字作为其参数。