我有一个.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);
}
您如何解决此问题?
答案 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()