首页 > 解决方案 > python将文本文件解压缩到单独的变量中

问题描述

我有一个像这样格式化的 .txt 文件

60
4
20
YF
X : YF+XF+Y
Y : XF-YF-X

我需要每一行都是一个单独的变量,最后两行被分解成字典中的键和值。我目前有这个:

class LSystem:
    def __init__(self,filename):

        #complete this method
        self.rules = {}
        file = open(filename)
        for i, line in enumerate(filename):
            if i == 0:
                self.angle = line
            elif i == 1:
                self.iteration = line
            elif i == 2:
                self.distance = line
            elif i == 3:
                self.axiom = line
            elif i >= 4:
                (key,val)= line.split
                self.rules[key] = val

        file.close()

这给了我这个错误:

Traceback (most recent call last):
  File "lab10.py", line 65, in <module>
    main()
  File "lab10.py", line 10, in main
    sys = lsystem.LSystem("arrowheadcurve.txt")
  File "/Users/alongo/Dropbox/Freshman Fall Semester/CS 110/Labs/lab-10-fall18-antmelon/lsystem.py", line 17, in __init__
(key,val)= line.split
TypeError: cannot unpack non-iterable builtin_function_or_method object

你如何解决这个问题?

标签: pythonpython-3.x

解决方案


正如@Carcigenicate 评论的line.split那样,实际上并没有调用该split()函数。您需要通过包含括号来调用它:

(key,val) = line.split()

但请注意,这split()将在空白字符上拆分。对于您的输入,这将导致一个包含三个项目的列表,并且将其解压缩为仅两个变量也将失败。

我假设您应该拆分:(进一步假设:不能出现在表达式中的其他位置)。尝试这个:

(key, val) = line.split(' : ')

我已将周围的空格包含在分隔符中,结果中不存在前导空格和尾随空格。如果空格不一致,您可以这样处理:

key, val = [s.strip() for s in line.split(':')]

此外,通过使用文件对象而不是文件名字符串来修复文件迭代,并在with语句中打开它(以便保证正确关闭):

    with open(filename) as f:
        for i, line in enumerate(f):
            line = line.strip()    # remove leading and trailing white space
            if i == 0:
                self.angle = line

推荐阅读