今天我试图打开一个文件,并根据文件的数据构建一些列表。我正在使用和语句。但我有以下疑问:
如果我写下面的代码:
def Preset_wheel_filler(self):
"""
Complete the Preset_wheel and also apply preset values when one
preset is selected.
"""
with open('Preset.txt', 'r') as PresetFile:
Presets = [line.split()[1:] for line in PresetFile if 'name:'
in line.split()]
with open('Preset.txt', 'r') as PresetFile:
channel_list = ['1', '2', '3', '4', '5', '6', '7', '8']
Preset_values = [line.split() for line in PresetFile for
y in channel_list if y in line.split()]
print(len(Preset_values))
创建的最后一个列表的长度是16.(这是正确的)
现在,如果我像这样重新安排代码:
def Preset_wheel_filler(self):
"""
Complete the Preset_wheel and also apply preset values when one
preset is selected.
"""
with open('Preset.txt', 'r') as PresetFile:
Presets = [line.split()[1:] for line in PresetFile if 'name:'
in line.split()]
channel_list = ['1', '2', '3', '4', '5', '6', '7', '8']
Preset_values = [line.split() for line in PresetFile for
y in channel_list if y in line.split()]
print(len(Preset_values))
打印长度为0。
我的问题是:为什么我要用开放的语句两次写?
提前致谢。
答案 0 :(得分:0)
文件是基于流的。一旦你读取了文件中的所有数据,它的位置指针就在最后,再也找不到任何东西了。你“可以”寻求0来解决这个问题,但是 - 你在第一次就完成了整行,只需从中解析两件事。
PresetFile.seek(0) # goes back to the beginning of the file.
参见https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects 有关如何使用搜索和可能查看https://docs.python.org/3/library/functions.html#open的详细信息 再次。