python - 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
你如何解决这个问题?
解决方案
正如@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
推荐阅读
- javascript - 我该怎么做才能返回一个里面有 dict 的数组?
- metatrader4 - 有人可以为 MT4 Manager API 帐户创建、存款/取款提供 REST api 或 powershell 脚本吗?
- sql - 每天的第一个和最后一个交易日期
- git - 将 Azure Synapse 数据库导入 Visual Studio 时出错
- c++ - 只接受枚举类型的函数
- xml - XML 缩进字符 (xmllint)
- vector - 如何计算3D平面中给定的三角形顶点的法线向量
- c++ - 将字符串分配给字符串返回类型函数而不复制
- twitter-bootstrap - 具有灵活导航栏的网页
- mysql - 如何在 typeorm 中使用 .env 连接到数据库