gpt4 book ai didi

python - 使用带有格式化字符串的Python exec() 函数?

转载 作者:行者123 更新时间:2023-11-30 23:04:09 24 4
gpt4 key购买 nike

我有一个包含我的学校时间表的文件,我想从文件中的每一行创建一个列表。该文件看起来像这样:

first:second:third:fourth:fifth
first:second:third:fourth:fifth

代码是这样的:

schedule_file = "school-schedule.txt"
with open(schedule_file) as schedule:
for c, line in enumerate(schedule):
exec("ln%s = schedule.read().split(':')" % str(c+1))

print(ln1)
print(ln2)
print(ln3)
print(ln4)
print(ln5)
print(ln6)
print(ln7)
print(ln8)
print(ln9)
print(ln10)

我知道该文件有十行,这就是为什么出于测试目的,我希望它打印这十个列表。不幸的是,它似乎将第一行放入名为 ln1 的列表中,并为所有其他列表引发 NameError 异常,从 ln2 开始:

['first', 'second', 'third', 'fourth', 'fifth']
Traceback (most recent call last):
File "D:\schedule.py", line 10, in <module>
print(ln2)
NameError: name 'ln2' is not defined

是否无法在 exec() 函数中使用格式化字符串,还是我犯了其他一些愚蠢的错误?

最佳答案

for c, line in enumerate(schedule):
exec("ln%s = schedule.read().split(':')" % str(c+1))

文件中的行位于变量 line 中,但您写道:

exec("ln%s = schedule.read().split(':')....

而不是:

exec("ln%s = line.split(':')...

无论如何,每当您发现自己编写具有如下名称的变量时:

print(ln1)
print(ln2)
print(ln3)
print(ln4)

如果变量名称仅相差一个数字,那么您需要停止正在做的事情,并使用列表代替。如果您有一个名为 ln 的列表,那么列表中的项目已经具有名称 ln[0]、ln[1] 等。因此,您可以这样做:

with open('data.txt') as f:
ln = [line.rstrip().split(':') for line in f]

print(ln)
print(ln[0])
print(ln[1])

--output:--
$ cat data.txt
a:b:c:d
e:f:g:h

$ python prog.py
[['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]
['a', 'b', 'c', 'd']
['e', 'f', 'g', 'h']

关于python - 使用带有格式化字符串的Python exec() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com