从 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]
切片配置[起始位置(含):结束位置(不含)]。
如果行数是拆分文件的唯一方法,可能是这样的:
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 更改为目录列表或命名切片列表,以便将来阅读。
我正在创建一个代码,它从一个 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]
切片配置[起始位置(含):结束位置(不含)]。
如果行数是拆分文件的唯一方法,可能是这样的:
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 更改为目录列表或命名切片列表,以便将来阅读。