如何开放作品?

时间:2018-03-02 18:05:16

标签: python-3.x with-statement

今天我试图打开一个文件,并根据文件的数据构建一些列表。我正在使用语句。但我有以下疑问:

如果我写下面的代码:

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。

我的问题是:为什么我要用开放的语句两次写

提前致谢。

1 个答案:

答案 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的详细信息 再次。