python将文本文件解压缩为单独的变量

时间:2018-11-27 00:33:34

标签: python python-3.x

我有一个.txt文件,其格式为

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

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

App\Providers\BroadcastServiceProvider::class,

这给了我这个错误:

public $user;

public function __construct(User $user){
    $this->user = $user;
}

public function broadcastOn(){
    return new PrivateChannel('user.'.$this->user->id);
}

您如何解决此问题?

2 个答案:

答案 0 :(得分:1)

正如@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

答案 1 :(得分:0)

您错过了一些我在以下代码中评论的小东西:

class LSystem:
    def __init__(self, filename):
        self.rules = {}
        your_file = open(filename) # Try to avoid using keyword as variable names
        for i, line in enumerate(your_file): # you should enumerate over your file object not its string name
            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(' : ') # You should call split passing your desired separator
        f.close()