从 txt 文件读取到 3 个不同列表时如何防止硬编码 - python

How to prevent hardcoding when reading from txt-file to 3 different lists - python

我正在创建一个代码,它从一个 txt 文件中读取信息并将信息存储在三个单独的列表中。我创建的代码以非常硬编码的方式执行此操作。我的问题是是否有任何更好的方法来读取文件,例如使用 for 循环或任何东西,因为此时的代码正在重复自身。

我创建的代码是:

def load():
with open("kurser.txt") as share_price_time:
    share_price_list_1 = []
    share_price_list_2 = []
    share_price_list_3 = []
    row_number = 0
    for row in share_price_time:
        if 36 < row_number < 67:
            info_1 = row.strip().split("\t")
            share_price_list_1.append(info_1[1])
        elif 104 < row_number < 135:
            info_2 = row.strip().split("\t")
            share_price_list_2.append(info_2[1])
        elif 172 < row_number < 203:
            info_3 = row.strip().split("\t")
            share_price_list_3.append(info_3[1])
        row_number = row_number + 1

提前感谢您的帮助!

您可以使用 itertools.islice 读出那些连续的部分,然后将每一行处理成一个列表,该列表附加到父列表:

from itertools import islice

indices = [(37, 67), (105, 135), (173, 203)]

def load():
   with open("kurser.txt") as share_price_time:
      lst = []
      for st, sp in indices:
         lst.append([r.strip().split("\t")[1] 
                               for r in islice(share_price_time, st, sp)])
         share_price_time.seek(0)

索引列表很容易修改,并且可以很容易地作为函数参数的一部分传递。

您可以先读取整个文件并存储切片:

with open('kurser.txt') as f:
    x = f.readlines()

a, b, c = x[37:67], x[105:135], x[173:203]

切片配置[起始位置(含):结束位置(不含)]。

See Docs Here

如果行数是拆分文件的唯一方法,可能是这样的:

share_price_spec = [(37,67), (105,135), (173,203)]
share_price_lists = []

with open("c:\Python\data.txt") as share_price_time:
    test = share_price_time.readlines()
    for price in share_price_spec:
        row_start,row_end = price[0], price[1]
        share_price_lists.append( test[row_start: row_end])

print(share_price_lists)

首先创建一个包含您感兴趣的行块的文件规范。然后将整个文件读入内存(假设文件不是太大)并使用文件规范将文件分成单独的部分。应该易于维护,因为您只需更改文件规范即可读取更多块。在我的示例代码中有一些额外的不必要的行,但为了 IMO 的可读性,这是值得的。

如果您愿意,可以将 share_price_spec 更改为目录列表或命名切片列表,以便将来阅读。