gpt4 book ai didi

Python 3 文本文件,以空格分隔列出

转载 作者:行者123 更新时间:2023-11-28 21:41:10 27 4
gpt4 key购买 nike

使用 Python 3,我想从文本文件 (hoge.txt) 生成列表,如下所示:

a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
....
an bn cn dn

列表应该是这样的:

a = [a1, a2, ...., an]
b = [b1, b2, ...., bn]
c = [c1, c2, ...., cn]
d = [d1, d2, ...., dn]

这是我可以编写的 python 代码,但是有什么方法可以使它更简单、更好吗?如果可能的话,我想使用列表理解,这在内存使用方面可能更有效?......

a=[]
b=[]
c=[]
d=[]
for line in open('hoge.txt'):
parts=line.split()
a.append(parts[0])
b.append(parts[1])
c.append(parts[2])
d.append(parts[3])

最佳答案

您可以使用 csv 阅读器(带分隔符 ' ')读取文件,然后使用 zip(*data) 转置数据

from csv import reader

with open('hoge.txt', 'r') as file:
data = reader(file, delimiter=' ')
transposed = (list(item) for item in zip(*data))
# transposed = zip(*data) # produces tuples: ('a1', 'a2', 'a3', 'an')
# instead of lists. depends on your needs.

a, b, c, d = transposed
print(a) # ['a1', 'a2', 'a3', 'an']

最后的赋值只适用于文件中的 4 行。但您应该能够根据自己的需要进行调整。这是一个变体:

a = next(transposed)  # ['a1', 'a2', 'a3', 'an']
b = next(transposed) # ['b1', 'b2', 'b3', 'bn']
....

如果你想通过列表理解直接获得转置,你可以这样做(感谢 Maarten Fabré 的评论):

with open('hoge.txt', 'r') as file:
data = reader(file, delimiter=' ')
transposed = [list(item) for item in zip(*data)]
# [['a1', 'a2', 'a3', 'an'], ['b1', 'b2', 'b3', 'bn'],
# ['c1', 'c2', 'c3', 'cn'], ['d1', 'd2', 'd3', 'dn']]

您需要转置数据,因此很难找到内存效率高的版本。如果要节省内存,则必须多次遍历文件。

关于Python 3 文本文件,以空格分隔列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45051261/

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